<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>Nginx 中文文档 - Module ngx_http_core_module | Docs4dev</title>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta name="description" content="Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="HandheldFriendly" content="true">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta property="og:type" content="website">
<meta property="og:title" content="Nginx 中文文档 - Module ngx_http_core_module">
<meta property="og:url" content="https://www.docs4dev.com/docs/zh/nginx/current/reference/http-ngx_http_core_module.html">
<meta property="og:site_name" content="Docs4dev">
<meta property="og:locale" content="zh_CN">
<meta name="twitter:card" content="Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。">
<meta name="generator" content="Docs4dev template engine">
<link rel="stylesheet" href="static/css/app.min.css">
<link rel="shortcut icon" href="https://www.docs4dev.com/static/images/favicon.ico" type="image/x-icon">
<script async="" src="static/js/js.js"></script>
<script async="" src="static/js/adsbygoogle.js" crossorigin="anonymous"></script>
<script>
    window.dataLayer = window.dataLayer || [];

    function gtag() {
      dataLayer.push(arguments);
    }

    gtag('js', new Date());
    gtag('config', 'UA-129571937-1');
  </script>
<link rel="amphtml" href="https://www.docs4dev.com/amp/docs/zh/nginx/current/reference/http-ngx_http_core_module.html">
<script type="application/ld+json">{"name":null,"headline":"Nginx 中文文档-Module ngx_http_core_module","inLanguage":"zh-CN","version":"current","image":"/static/icon/icon-nginx.svg","datePublished":"2021-05-20T12:51:01Z","dateCreated":"2021-05-20T12:51:01Z","dateModified":"2021-07-07T12:48:29Z","@context":"https://schema.org/","@type":"APIReference","abstract":"Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。"}</script>
</head>
<body>
<div class="book with-summary">
<div class="book-summary">
<div class="logo">
<a href="index.html" style="color: inherit;">
<img src="static/picture/icon-nginx.svg" style="width: 48px; height: 48px;" alt="Logo">
</a>
<b style="color: inherit; margin-left: 8px;">Nginx 中文文档</b>
</div>
<div class="item">
<div>
<label for="version">版本</label>
<select id="version" onchange="onVersionChange(this)">
<option value="current" selected="selected">current</option>
</select>
</div>
<div style="margin-top: 8px;">
<label for="language">语言</label>
<select id="language" onchange="onLangChange(this)" value="zh">
<option value="en">English</option>
<option value="zh" selected="selected">中文</option>
</select>
</div>

</div>
<div class="item menus">
<a title="Table of Contents" style="margin-right: 8px;" href="index.html">
<i class="fa fa-chevron-left"></i>
<span style="margin-left: 2px;">返回目录</span>
</a>
</div>
<nav role="navigation" id="navigation">
<ul class="summary">
<li class="chapter"> <a href="install.html" title="Introduction"> Introduction </a>
<ul class="articles">
<li class="chapter"> <a href="install.html" title="Installing nginx"> Installing nginx </a> </li>
<li class="chapter"> <a href="configure.html" title="从源代码构建  Nginx"> 从源代码构建 Nginx </a> </li>
<li class="chapter"> <a href="beginners_guide.html" title="Beginner's Guide"> Beginner's Guide </a> </li>
<li class="chapter"> <a href="control.html" title="Controlling nginx"> Controlling nginx </a> </li>
<li class="chapter"> <a href="events.html" title="连接处理方法"> 连接处理方法 </a> </li>
<li class="chapter"> <a href="hash.html" title="设置哈希"> 设置哈希 </a> </li>
<li class="chapter"> <a href="debugging_log.html" title="调试日志"> 调试日志 </a> </li>
<li class="chapter"> <a href="syslog.html" title="记录到系统日志"> 记录到系统日志 </a> </li>
<li class="chapter"> <a href="syntax.html" title="配置文件测量单位"> 配置文件测量单位 </a> </li>
<li class="chapter"> <a href="switches.html" title="Command-line parameters"> Command-line parameters </a> </li>
<li class="chapter"> <a href="windows.html" title="Windows 版  Nginx"> Windows 版 Nginx </a> </li>
<li class="chapter"> <a href="http-request_processing.html" title="Nginx 如何处理请求"> Nginx 如何处理请求 </a> </li>
<li class="chapter"> <a href="http-server_names.html" title="Server names"> Server names </a> </li>
<li class="chapter"> <a href="http-load_balancing.html" title="使用  Nginx 作为  HTTP 负载均衡器"> 使用 Nginx 作为 HTTP 负载均衡器 </a> </li>
<li class="chapter"> <a href="http-configuring_https_servers.html" title="配置  HTTPS 服务器"> 配置 HTTPS 服务器 </a> </li>
<li class="chapter"> <a href="stream-stream_processing.html" title="Nginx 如何处理  TCP/UDP 会话"> Nginx 如何处理 TCP/UDP 会话 </a> </li>
<li class="chapter"> <a href="njs-index.html" title="用  njs 编写脚本"> 用 njs 编写脚本 </a> </li>
</ul> </li>
<li class="chapter"> <a href="howto_build_on_win32.html" title="How-To"> How-To </a>
<ul class="articles">
<li class="chapter"> <a href="howto_build_on_win32.html" title="使用  Visual C 在  Win32 平台上构建  Nginx"> 使用 Visual C 在 Win32 平台上构建 Nginx </a> </li>
<li class="chapter"> <a href="nginx_dtrace_pid_provider.html" title="使用  DTrace pid 提供程序调试  nginx"> 使用 DTrace pid 提供程序调试 nginx </a> </li>
<li class="chapter"> <a href="http-converting_rewrite_rules.html" title="转换重写规则"> 转换重写规则 </a> </li>
<li class="chapter"> <a href="http-websocket.html" title="WebSocket proxying"> WebSocket proxying </a> </li>
</ul> </li>
<li class="chapter"> <a href="contributing_changes.html" title="Development"> Development </a>
<ul class="articles">
<li class="chapter"> <a href="contributing_changes.html" title="Contributing Changes"> Contributing Changes </a> </li>
<li class="chapter"> <a href="dev-development_guide.html" title="Development guide"> Development guide </a> </li>
</ul> </li>
<li class="chapter"> <a href="dirindex.html" title="Modules reference"> Modules reference </a>
<ul class="articles">
<li class="chapter"> <a href="dirindex.html" title="指令的字母索引"> 指令的字母索引 </a> </li>
<li class="chapter"> <a href="varindex.html" title="变量按字母顺序索引"> 变量按字母顺序索引 </a> </li>
<li class="chapter"> <a href="ngx_core_module.html" title="Core functionality"> Core functionality </a> </li>
<li class="chapter"> <a href="" title="ngx_http_core_module"> ngx_http_core_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_access_module.html" title="ngx_http_access_module"> ngx_http_access_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_addition_module.html" title="ngx_http_addition_module"> ngx_http_addition_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_api_module.html" title="ngx_http_api_module"> ngx_http_api_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_basic_module.html" title="ngx_http_auth_basic_module"> ngx_http_auth_basic_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_jwt_module.html" title="ngx_http_auth_jwt_module"> ngx_http_auth_jwt_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_request_module.html" title="ngx_http_auth_request_module"> ngx_http_auth_request_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_autoindex_module.html" title="ngx_http_autoindex_module"> ngx_http_autoindex_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_browser_module.html" title="ngx_http_browser_module"> ngx_http_browser_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_charset_module.html" title="ngx_http_charset_module"> ngx_http_charset_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_dav_module.html" title="ngx_http_dav_module"> ngx_http_dav_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_empty_gif_module.html" title="ngx_http_empty_gif_module"> ngx_http_empty_gif_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_f4f_module.html" title="ngx_http_f4f_module"> ngx_http_f4f_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_fastcgi_module.html" title="ngx_http_fastcgi_module"> ngx_http_fastcgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_flv_module.html" title="ngx_http_flv_module"> ngx_http_flv_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_geo_module.html" title="ngx_http_geo_module"> ngx_http_geo_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_geoip_module.html" title="ngx_http_geoip_module"> ngx_http_geoip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_grpc_module.html" title="ngx_http_grpc_module"> ngx_http_grpc_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gunzip_module.html" title="ngx_http_gunzip_module"> ngx_http_gunzip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gzip_module.html" title="ngx_http_gzip_module"> ngx_http_gzip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gzip_static_module.html" title="ngx_http_gzip_static_module"> ngx_http_gzip_static_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_headers_module.html" title="ngx_http_headers_module"> ngx_http_headers_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_hls_module.html" title="ngx_http_hls_module"> ngx_http_hls_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_image_filter_module.html" title="ngx_http_image_filter_module"> ngx_http_image_filter_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_index_module.html" title="ngx_http_index_module"> ngx_http_index_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_js_module.html" title="ngx_http_js_module"> ngx_http_js_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_keyval_module.html" title="ngx_http_keyval_module"> ngx_http_keyval_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_limit_conn_module.html" title="ngx_http_limit_conn_module"> ngx_http_limit_conn_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_limit_req_module.html" title="ngx_http_limit_req_module"> ngx_http_limit_req_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_log_module.html" title="ngx_http_log_module"> ngx_http_log_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_map_module.html" title="ngx_http_map_module"> ngx_http_map_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_memcached_module.html" title="ngx_http_memcached_module"> ngx_http_memcached_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_mirror_module.html" title="ngx_http_mirror_module"> ngx_http_mirror_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_mp4_module.html" title="ngx_http_mp4_module"> ngx_http_mp4_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_perl_module.html" title="ngx_http_perl_module"> ngx_http_perl_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_proxy_module.html" title="ngx_http_proxy_module"> ngx_http_proxy_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_random_index_module.html" title="ngx_http_random_index_module"> ngx_http_random_index_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_realip_module.html" title="ngx_http_realip_module"> ngx_http_realip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_referer_module.html" title="ngx_http_referer_module"> ngx_http_referer_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_rewrite_module.html" title="ngx_http_rewrite_module"> ngx_http_rewrite_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_scgi_module.html" title="ngx_http_scgi_module"> ngx_http_scgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_secure_link_module.html" title="ngx_http_secure_link_module"> ngx_http_secure_link_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_session_log_module.html" title="ngx_http_session_log_module"> ngx_http_session_log_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_slice_module.html" title="ngx_http_slice_module"> ngx_http_slice_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_spdy_module.html" title="ngx_http_spdy_module"> ngx_http_spdy_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_split_clients_module.html" title="ngx_http_split_clients_module"> ngx_http_split_clients_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_ssi_module.html" title="ngx_http_ssi_module"> ngx_http_ssi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_ssl_module.html" title="ngx_http_ssl_module"> ngx_http_ssl_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_status_module.html" title="ngx_http_status_module"> ngx_http_status_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_stub_status_module.html" title="ngx_http_stub_status_module"> ngx_http_stub_status_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_sub_module.html" title="ngx_http_sub_module"> ngx_http_sub_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_module.html" title="ngx_http_upstream_module"> ngx_http_upstream_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_conf_module.html" title="ngx_http_upstream_conf_module"> ngx_http_upstream_conf_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_hc_module.html" title="ngx_http_upstream_hc_module"> ngx_http_upstream_hc_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_userid_module.html" title="ngx_http_userid_module"> ngx_http_userid_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_uwsgi_module.html" title="ngx_http_uwsgi_module"> ngx_http_uwsgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_v2_module.html" title="ngx_http_v2_module"> ngx_http_v2_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_xslt_module.html" title="ngx_http_xslt_module"> ngx_http_xslt_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_core_module.html" title="ngx_mail_core_module"> ngx_mail_core_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_auth_http_module.html" title="ngx_mail_auth_http_module"> ngx_mail_auth_http_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_proxy_module.html" title="ngx_mail_proxy_module"> ngx_mail_proxy_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_ssl_module.html" title="ngx_mail_ssl_module"> ngx_mail_ssl_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_imap_module.html" title="ngx_mail_imap_module"> ngx_mail_imap_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_pop3_module.html" title="ngx_mail_pop3_module"> ngx_mail_pop3_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_smtp_module.html" title="ngx_mail_smtp_module"> ngx_mail_smtp_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_core_module.html" title="ngx_stream_core_module"> ngx_stream_core_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_access_module.html" title="ngx_stream_access_module"> ngx_stream_access_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_geo_module.html" title="ngx_stream_geo_module"> ngx_stream_geo_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_geoip_module.html" title="ngx_stream_geoip_module"> ngx_stream_geoip_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_js_module.html" title="ngx_stream_js_module"> ngx_stream_js_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_keyval_module.html" title="ngx_stream_keyval_module"> ngx_stream_keyval_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_limit_conn_module.html" title="ngx_stream_limit_conn_module"> ngx_stream_limit_conn_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_log_module.html" title="ngx_stream_log_module"> ngx_stream_log_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_map_module.html" title="ngx_stream_map_module"> ngx_stream_map_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_proxy_module.html" title="ngx_stream_proxy_module"> ngx_stream_proxy_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_realip_module.html" title="ngx_stream_realip_module"> ngx_stream_realip_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_return_module.html" title="ngx_stream_return_module"> ngx_stream_return_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_split_clients_module.html" title="ngx_stream_split_clients_module"> ngx_stream_split_clients_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_ssl_module.html" title="ngx_stream_ssl_module"> ngx_stream_ssl_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_ssl_preread_module.html" title="ngx_stream_ssl_preread_module"> ngx_stream_ssl_preread_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_upstream_module.html" title="ngx_stream_upstream_module"> ngx_stream_upstream_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_upstream_hc_module.html" title="ngx_stream_upstream_hc_module"> ngx_stream_upstream_hc_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_zone_sync_module.html" title="ngx_stream_zone_sync_module"> ngx_stream_zone_sync_module </a> </li>
<li class="chapter"> <a href="ngx_google_perftools_module.html" title="ngx_google_perftools_module"> ngx_google_perftools_module </a> </li>
</ul> </li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<header class="book-header">
<div class="dropdown pull-right js-toolbar-action">
<a class="btn toggle-dropdown" aria-label="Language" href="#">
<i class="fa fa-globe"></i>
</a>
<div class="dropdown-menu dropdown-left">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<button class="button size-1" onclick="changeLang('zh_CN')">中文</button>
</div>
<div class="buttons">
<button class="button size-1" onclick="changeLang('en_US')">English</button>
</div>
</div>
</div>
<a class="btn pull-right js-toolbar-action non-mobile" aria-label="Sign up" href="register.html">
<i class="fa fa-sign-in"></i> <span>注册</span>
</a>
<a class="btn pull-right js-toolbar-action non-mobile" aria-label="Sign in" href="register.html">
<i class="fa fa-sign-in"></i>
<span>登录</span>
</a>
<a class="btn pull-left js-toolbar-action btn-summary" href="#"><i class="fa fa-align-justify"></i></a>
<div class="dropdown pull-left font-settings js-toolbar-action">
<a class="btn toggle-dropdown" aria-label="Font Settings" href="#">
<i class="fa fa-font"></i>
</a>
<div class="dropdown-menu dropdown-right">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<button class="button size-2 font-reduce">A</button>
<button class="button size-2 font-enlarge">A</button>
</div>
<div class="buttons">
<button class="button size-2 family-serif">Serif</button>
<button class="button size-2 family-sans">Sans</button>
</div>
<div class="buttons">
<button class="button size-3 theme-white">White</button>
<button class="button size-3 theme-sepia">Sepia</button>
<button class="button size-3 theme-night">Night</button>
</div>
</div>
</div>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Home" href="zh.html">
<i class="fa fa-home"></i> <span>首页</span>
</a>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Guide" href="javascript:window.open('https://www.javadoc.org/');">
<i class="fa fa-book"></i> <span>API Docs</span>
</a>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Tools" href="index1.html">
<i class="fa fa-gears"></i> <span>工具</span>
</a>
<div class="dropdown pull-left js-toolbar-action mobile">
<a class="btn toggle-dropdown" aria-label="Language" href="#">
<i class="fa fa-chevron-down"></i>
</a>
<div class="dropdown-menu dropdown-right">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<a class="button size-1" aria-label="Home" href="zh.html">
<i class="fa fa-home"></i> <span>首页</span>
</a>
</div>
<div class="buttons">
<a class="button size-1" aria-label="Guide" href="javascript:window.open('https://www.javadoc.org/');">
<i class="fa fa-book"></i> <span>API Docs</span>
</a>
</div>
<div class="buttons">
<a class="button size-1" aria-label="Tools" href="index1.html">
<i class="fa fa-gears"></i> <span>工具</span>
</a>
</div>
</div>
</div>
<div id="autocomplete" class="pull-right"></div>
<span id="toolbar-title"></span>
</header>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<div id="content">
<h1>Module ngx_http_core_module</h1>
<div><ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-6108808167664152" data-ad-slot="6964403648"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
<div><ul>
<li><a href="#directives">Directives</a>
<ul>
<li><a href="#absolute_redirect">absolute_redirect</a></li>
<li><a href="#aio">aio</a></li>
<li><a href="#aio_write">aio_write</a></li>
<li><a href="#alias">alias</a></li>
<li><a href="#auth_delay">auth_delay</a></li>
<li><a href="#chunked_transfer_encoding">chunked_transfer_encoding</a></li>
<li><a href="#client_body_buffer_size">client_body_buffer_size</a></li>
<li><a href="#client_body_in_file_only">client_body_in_file_only</a></li>
<li><a href="#client_body_in_single_buffer">client_body_in_single_buffer</a></li>
<li><a href="#client_body_temp_path">client_body_temp_path</a></li>
<li><a href="#client_body_timeout">client_body_timeout</a></li>
<li><a href="#client_header_buffer_size">client_header_buffer_size</a></li>
<li><a href="#client_header_timeout">client_header_timeout</a></li>
<li><a href="#client_max_body_size">client_max_body_size</a></li>
<li><a href="#connection_pool_size">connection_pool_size</a></li>
<li><a href="#default_type">default_type</a></li>
<li><a href="#directio">directio</a></li>
<li><a href="#directio_alignment">directio_alignment</a></li>
<li><a href="#disable_symlinks">disable_symlinks</a></li>
<li><a href="#error_page">error_page</a></li>
<li><a href="#etag">etag</a></li>
<li><a href="#http">http</a></li>
<li><a href="#if_modified_since">if_modified_since</a></li>
<li><a href="#ignore_invalid_headers">ignore_invalid_headers</a></li>
<li><a href="#internal">internal</a></li>
<li><a href="#keepalive_disable">keepalive_disable</a></li>
<li><a href="#keepalive_requests">keepalive_requests</a></li>
<li><a href="#keepalive_timeout">keepalive_timeout</a></li>
<li><a href="#large_client_header_buffers">large_client_header_buffers</a></li>
<li><a href="#limit_except">limit_except</a></li>
<li><a href="#limit_rate">limit_rate</a></li>
<li><a href="#limit_rate_after">limit_rate_after</a></li>
<li><a href="#lingering_close">lingering_close</a></li>
<li><a href="#lingering_time">lingering_time</a></li>
<li><a href="#lingering_timeout">lingering_timeout</a></li>
<li><a href="#listen">listen</a></li>
<li><a href="#location">location</a></li>
<li><a href="#log_not_found">log_not_found</a></li>
<li><a href="#log_subrequest">log_subrequest</a></li>
<li><a href="#max_ranges">max_ranges</a></li>
<li><a href="#merge_slashes">merge_slashes</a></li>
<li><a href="#msie_padding">msie_padding</a></li>
<li><a href="#msie_refresh">msie_refresh</a></li>
<li><a href="#open_file_cache">open_file_cache</a></li>
<li><a href="#open_file_cache_errors">open_file_cache_errors</a></li>
<li><a href="#open_file_cache_min_uses">open_file_cache_min_uses</a></li>
<li><a href="#open_file_cache_valid">open_file_cache_valid</a></li>
<li><a href="#output_buffers">output_buffers</a></li>
<li><a href="#port_in_redirect">port_in_redirect</a></li>
<li><a href="#postpone_output">postpone_output</a></li>
<li><a href="#read_ahead">read_ahead</a></li>
<li><a href="#recursive_error_pages">recursive_error_pages</a></li>
<li><a href="#request_pool_size">request_pool_size</a></li>
<li><a href="#reset_timedout_connection">reset_timedout_connection</a></li>
<li><a href="#resolver">resolver</a></li>
<li><a href="#resolver_timeout">resolver_timeout</a></li>
<li><a href="#root">root</a></li>
<li><a href="#satisfy">satisfy</a></li>
<li><a href="#send_lowat">send_lowat</a></li>
<li><a href="#send_timeout">send_timeout</a></li>
<li><a href="#sendfile">sendfile</a></li>
<li><a href="#sendfile_max_chunk">sendfile_max_chunk</a></li>
<li><a href="#server">server</a></li>
<li><a href="#server_name">server_name</a></li>
<li><a href="#server_name_in_redirect">server_name_in_redirect</a></li>
<li><a href="#server_names_hash_bucket_size">server_names_hash_bucket_size</a></li>
<li><a href="#server_names_hash_max_size">server_names_hash_max_size</a></li>
<li><a href="#server_tokens">server_tokens</a></li>
<li><a href="#subrequest_output_buffer_size">subrequest_output_buffer_size</a></li>
<li><a href="#tcp_nodelay">tcp_nodelay</a></li>
<li><a href="#tcp_nopush">tcp_nopush</a></li>
<li><a href="#try_files">try_files</a></li>
<li><a href="#types">types</a></li>
<li><a href="#types_hash_bucket_size">types_hash_bucket_size</a></li>
<li><a href="#types_hash_max_size">types_hash_max_size</a></li>
<li><a href="#underscores_in_headers">underscores_in_headers</a></li>
<li><a href="#variables_hash_bucket_size">variables_hash_bucket_size</a></li>
<li><a href="#variables_hash_max_size">variables_hash_max_size</a></li>
</ul>
</li>
<li><a href="#variables">Embedded Variables</a><br><a href="" id="directives"></a></li>
</ul>
<h4 id="directives"><a href="#directives" id="directives"></a>Directives</h4>
<p><a href="" id="absolute_redirect"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>absolute_redirect on | off;</code></td></tr>
<tr><td>Default:</td><td><code>absolute_redirect on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在 1.11.8 版本中。</p>
<p>如果禁用，nginx 发出的重定向将是相对的。</p>
<p>另请参见<a href="#server_name_in_redirect">server_name_in_redirect</a>和<a href="#port_in_redirect">port_in_redirect</a>指令。</p>
<p><a href="" id="aio"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>aio on | off | threads[=pool];</code></td></tr>
<tr><td>Default:</td><td><code>aio off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 0.8.11 中。</p>
<p>在 FreeBSD 和 Linux 上启用或禁用异步文件 I/O(AIO)：</p>
<pre><code class="hljs language-shell">location /video/ {
    aio            on;
    output_buffers 1 64k;
}
</code></pre>
<p>在 FreeBSD 上，可以从 FreeBSD 4.3 开始使用 AIO。在 FreeBSD 11.0 之前，AIO 可以静态链接到内核：</p>
<pre><code class="hljs language-shell">options VFS_AIO
</code></pre>
<p>或作为内核可加载模块动态加载：</p>
<pre><code class="hljs language-shell">kldload aio
</code></pre>
<p>在 Linux 上，可以从内核版本 2.6.22 开始使用 AIO。另外，有必要启用<a href="#directio">directio</a>，否则将阻止读取：</p>
<pre><code class="hljs language-shell">location /video/ {
    aio            on;
    directio       512;
    output_buffers 1 128k;
}
</code></pre>
<p>在 Linux 上，<a href="#directio">directio</a>仅可用于读取在 512 字节边界(对于 XFS 为 4K)上对齐的块。在阻塞模式下读取文件未对齐的结尾。对于字节范围请求和 FLV 请求(并非从文件开头开始)也是如此：在文件的开头和结尾读取未对齐的数据将被阻止。</p>
<p>在 Linux 上同时启用 AIO 和<a href="#sendfile">sendfile</a>时，AIO 用于大于或等于<a href="#directio">directio</a>指令中指定的大小的文件，而<a href="#sendfile">sendfile</a>用于较小的文件或禁用<a href="#directio">directio</a>的文件。</p>
<pre><code class="hljs language-shell">location /video/ {
    sendfile       on;
    aio            on;
    directio       8m;
}
</code></pre>
<p>最后，可以使用多线程(1.7.11)读取文件和<a href="#sendfile">sent</a>，而不会阻塞辅助进程：</p>
<pre><code class="hljs language-shell">location /video/ {
    sendfile       on;
    aio            threads;
}
</code></pre>
<p>读取和发送文件操作被卸载到指定的<a href="ngx_core_module.html#thread_pool">pool</a>的线程中。如果省略池名称，则使用名称为“ <code>default</code>”的池。池名称也可以使用变量设置：</p>
<pre><code class="hljs language-shell">aio threads=pool$disk;
</code></pre>
<p>默认情况下，禁用多线程，应使用<code>--with-threads</code>配置参数将其启用。当前，多线程仅与<a href="events.html#epoll">epoll</a>，<a href="events.html#kqueue">kqueue</a>和<a href="events.html#eventport">eventport</a>方法兼容。仅在 Linux 上支持文件的多线程发送。</p>
<p>另请参见<a href="#sendfile">sendfile</a>指令。</p>
<p><a href="" id="aio_write"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>aio_write on | off;</code></td></tr>
<tr><td>Default:</td><td><code>aio_write off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在 1.9.13 版中。</p>
<p>如果启用了<a href="#aio">aio</a>，则指定是否用于写入文件。当前，这仅在使用<code>aio threads</code>时有效，并且仅限于使用从代理服务器接收到的数据写入临时文件。</p>
<p><a href="" id="alias"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>alias path;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>location</code></td></tr>
</tbody>
</table>
<p>定义指定位置的替换。例如，使用以下配置</p>
<pre><code class="hljs language-shell">location /i/ {
    alias /data/w3/images/;
}
</code></pre>
<p>应“ <code>/i/top.gif</code>”的请求，文件<code>/data/w3/images/top.gif</code>将被发送。</p>
<p><code>path</code>值可以包含<code>$document_root</code>和<code>$realpath_root</code>除外的变量。</p>
<p>如果在由正则表达式定义的位置内使用<code>alias</code>，则该正则表达式应包含捕获，而<code>alias</code>应引用这些捕获(0.7.40)，例如：</p>
<pre><code class="hljs language-shell">location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
    alias /data/w3/images/$1;
}
</code></pre>
<p>当 location 与指令值的最后一部分匹配时：</p>
<pre><code class="hljs language-shell">location /images/ {
    alias /data/w3/images/;
}
</code></pre>
<p>最好改用<a href="#root">root</a>指令：</p>
<pre><code class="hljs language-shell">location /images/ {
    root /data/w3;
}
</code></pre>
<p><a href="" id="auth_delay"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>auth_delay time;</code></td></tr>
<tr><td>Default:</td><td><code>auth_delay 0s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 1.17.10 中。</p>
<p>当访问受<a href="http-ngx_http_auth_basic_module.html">password</a>，<a href="http-ngx_http_auth_request_module.html">子请求的结果</a>或<a href="http-ngx_http_auth_jwt_module.html">JWT</a>限制时，使用 401 响应代码延迟对未授权请求的处理，以防止定时攻击。</p>
<p><a href="" id="chunked_transfer_encoding"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>chunked_transfer_encoding on | off;</code></td></tr>
<tr><td>Default:</td><td><code>chunked_transfer_encoding on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>允许在 HTTP/1.1 中禁用分块传输编码。当使用尽管标准有要求而仍不支持分块编码的软件时，它可能会派上用场。</p>
<p><a href="" id="client_body_buffer_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>client_body_buffer_size size;</code></td></tr>
<tr><td>Default:</td><td><code>client_body_buffer_size 8k|16k;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置用于读取客户端请求正文的缓冲区大小。如果请求主体大于缓冲区，则将整个主体或仅将其一部分写入<a href="#client_body_temp_path">temporary file</a>。默认情况下，缓冲区大小等于两个内存页。在 x86，其他 32 位平台和 x86-64 上为 8K。在其他 64 位平台上，通常为 16K。</p>
<p><a href="" id="client_body_in_file_only"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>client_body_in_file_only on | clean | off;</code></td></tr>
<tr><td>Default:</td><td><code>client_body_in_file_only off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>确定 nginx 是否应将整个客户端请求主体保存到文件中。此伪指令可以在调试期间使用，也可以在使用<code>$request_body_file</code>变量或模块<a href="http-ngx_http_perl_module.html">ngx_http_perl_module</a>的<a href="http-ngx_http_perl_module.html#methods">$r-&gt;request_body_file</a>方法时使用。</p>
<p>当设置为值<code>on</code>时，请求处理后不会删除临时文件。</p>
<p>值<code>clean</code>将导致删除请求处理后剩余的临时文件。</p>
<p><a href="" id="client_body_in_single_buffer"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>client_body_in_single_buffer on | off;</code></td></tr>
<tr><td>Default:</td><td><code>client_body_in_single_buffer off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>确定 nginx 是否应将整个客户端请求主体保存在单个缓冲区中。建议在使用<code>$request_body</code>变量时使用该指令，以节省涉及的复制操作的数量。</p>
<p><a href="" id="client_body_temp_path"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>client_body_temp_path path [level1 [level2 [level3]]];</code></td></tr>
<tr><td>Default:</td><td><code>client_body_temp_path client_body_temp;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>定义用于存储包含客户端请求正文的临时文件的目录。在指定目录下最多可以使用三级子目录层次结构。例如，在以下配置中</p>
<pre><code class="hljs language-shell">client_body_temp_path /spool/nginx/client_temp 1 2;
</code></pre>
<p>临时文件的路径可能如下所示：</p>
<pre><code class="hljs language-shell">/spool/nginx/client_temp/7/45/00000123457
</code></pre>
<p><a href="" id="client_body_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>client_body_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>client_body_timeout 60s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>定义读取客户端请求正文的超时。仅在两次连续读取操作之间的一段时间内设置超时，而不是为整个请求主体的传输设置超时。如果客户端在此时间内未传输任何内容，则请求将终止并显示 408(请求超时)错误。</p>
<p><a href="" id="client_header_buffer_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>client_header_buffer_size size;</code></td></tr>
<tr><td>Default:</td><td><code>client_header_buffer_size 1k;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code></td></tr>
</tbody>
</table>
<p>设置用于读取客户端请求 Headers 的缓冲区大小。对于大多数请求，一个 1K 字节的缓冲区就足够了。但是，如果请求中包含长 Cookie 或来自 WAP 客户端，则该请求可能不适合 1K。如果请求行或请求 Headers 字段不适合此缓冲区，则将分配由<a href="#large_client_header_buffers">large_client_header_buffers</a>指令配置的较大缓冲区。</p>
<p><a href="" id="client_header_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>client_header_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>client_header_timeout 60s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code></td></tr>
</tbody>
</table>
<p>定义读取客户端请求 Headers 的超时。如果客户端在此时间内未传输整个 Headers，则请求将以 408(请求超时)错误终止。</p>
<p><a href="" id="client_max_body_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>client_max_body_size size;</code></td></tr>
<tr><td>Default:</td><td><code>client_max_body_size 1m;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置客户端请求正文的最大允许大小，在“ Content-Length”请求 Headers 字段中指定。如果请求中的大小超过配置的值，则会向客户端返回 413(请求实体太大)错误。请注意，浏览器无法正确显示此错误。将<code>size</code>设置为 0 将禁用客户端请求主体大小的检查。</p>
<p><a href="" id="connection_pool_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>connection_pool_size size;</code></td></tr>
<tr><td>Default:</td><td><code>connection_pool_size 256|512;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code></td></tr>
</tbody>
</table>
<p>允许精确调整每个连接的内存分配。该指令对性能的影响最小，一般不应使用。默认情况下，大小在 32 位平台上等于 256 字节，在 64 位平台上等于 512 字节。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在版本 1.9.8 之前，所有平台上的默认值为 256.</p>
</div></div>
<p><a href="" id="default_type"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>default_type mime-type;</code></td></tr>
<tr><td>Default:</td><td><code>default_type text/plain;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>定义响应的默认 MIME 类型。可以使用<a href="#types">types</a>指令设置文件 extensions 到 MIME 类型的映射。</p>
<p><a href="" id="directio"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>directio size | off;</code></td></tr>
<tr><td>Default:</td><td><code>directio off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 0.7.7 中。</p>
<p>当读取大于或等于指定的<code>size</code>的文件时，启用<code>O_DIRECT</code>标志(FreeBSD，Linux)，<code>F_NOCACHE</code>标志(macOS)或<code>directio()</code>函数(Solaris)的使用。该指令自动针对给定请求禁用(0.7.15)<a href="#sendfile">sendfile</a>的使用。它对于提供大文件很有用：</p>
<pre><code class="hljs language-shell">directio 4m;
</code></pre>
<p>或在 Linux 上使用<a href="#aio">aio</a>时。</p>
<p><a href="" id="directio_alignment"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>directio_alignment size;</code></td></tr>
<tr><td>Default:</td><td><code>directio_alignment 512;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 0.8.11 中。</p>
<p>设置<a href="#directio">directio</a>的对齐方式。在大多数情况下，一个 512 字节的对齐就足够了。但是，在 Linux 下使用 XFS 时，需要将其增加到 4K。</p>
<p><a href="" id="disable_symlinks"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>disable_symlinks off;</code></td></tr>
<tr><td><br><code>disable_symlinks on | if_not_owner [from=part];</code></td></tr>
<tr><td>默认值：</td><td><code>disable_symlinks off;</code></td></tr>
<tr><td>上下文： <code>http</code>，<code>server</code>，<code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在 1.1.15 版中。</p>
<p>确定打开文件时应如何对待符号链接：</p>
<ul>
<li>
<p><code>off</code></p>
<ul>
<li>路径名中的符号链接是允许的，而不是选中的。这是默认行为。</li>
</ul>
</li>
<li>
<p><code>on</code></p>
<ul>
<li>如果路径名的任何组成部分都是符号链接，则拒绝访问文件。</li>
</ul>
</li>
<li>
<p><code>if_not_owner</code></p>
<ul>
<li>如果路径名的任何组成部分是符号链接，并且该链接指向的链接和对象具有不同的所有者，则拒绝访问文件。</li>
</ul>
</li>
<li>
<p><code>from</code> = <code>part</code></p>
<ul>
<li>在检查符号链接(参数<code>on</code>和<code>if_not_owner</code>)时，通常会检查路径名的所有组成部分。通过另外指定<code>from</code> = <code>part</code>参数，可以避免在路径名的初始部分检查符号链接。在这种情况下，仅从位于指定初始部分之后的路径名组件中检查符号链接。如果该值不是所检查路径名的初始部分，则将检查整个路径名，就好像根本没有指定此参数一样。如果该值与整个文件名匹配，则不检查符号链接。参数值可以包含变量。</li>
</ul>
</li>
</ul>
<p>Example:</p>
<pre><code class="hljs language-shell">disable_symlinks on from=$document_root;
</code></pre>
<p>该伪指令仅在具有<code>openat()</code>和<code>fstatat()</code>接口的系统上可用。这样的系统包括 FreeBSD，Linux 和 Solaris 的现代版本。</p>
<p>参数<code>on</code>和<code>if_not_owner</code>增加了处理开销。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在不支持仅打开目录进行搜索的系统上，要使用这些参数，要求工作进程具有对所有正在检查的目录的读取权限。</p>
</div></div><div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p><a href="http-ngx_http_autoindex_module.html">ngx_http_autoindex_module</a>，<a href="http-ngx_http_random_index_module.html">ngx_http_random_index_module</a>和<a href="http-ngx_http_dav_module.html">ngx_http_dav_module</a>模块当前忽略此指令。</p>
</div></div>
<p><a href="" id="error_page"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>error_page code ... [=[response]] uri;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code> , <code>if in location</code></td></tr>
</tbody>
</table>
<p>定义将为指定错误显示的 URI。 <code>uri</code>值可以包含变量。</p>
<p>Example:</p>
<pre><code class="hljs language-shell">error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;
</code></pre>
<p>这将导致内部重定向到指定的<code>uri</code>，而客户端请求方法已更改为“ <code>GET</code>”(对于“ <code>GET</code>”和“ <code>HEAD</code>”以外的所有方法)。</p>
<p>此外，可以使用“ <code>=</code> <code>response</code>”语法将响应代码更改为另一个，例如：</p>
<pre><code class="hljs language-shell">error_page 404 =200 /empty.gif;
</code></pre>
<p>如果错误响应是由代理服务器或 FastCGI/uwsgi/SCGI/gRPC 服务器处理的，并且服务器可能返回不同的响应代码(例如 200、302、401 或 404)，则可以使用该代码进行响应返回：</p>
<pre><code class="hljs language-shell">error_page 404 = /404.php;
</code></pre>
<p>如果在内部重定向期间无需更改 URI 和方法，则可以将错误处理传递到命名位置：</p>
<pre><code class="hljs language-shell">location / {
    error_page 404 = @fallback;
}

location @fallback {
    proxy_pass http://backend;
}
</code></pre>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>如果<code>uri</code>处理导致错误，则会将最后发生的错误的状态代码返回给客户端。</p>
</div></div>
<p>也可以使用 URL 重定向进行错误处理：</p>
<pre><code class="hljs language-shell">error_page 403      http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;
</code></pre>
<p>在这种情况下，默认情况下，响应代码 302 返回给客户端。它只能更改为重定向状态代码之一(301、302、303、307 和 308)。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>直到版本 1.1.16 和 1.0.13 才将代码 307 视为重定向。</p>
</div></div><div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>直到版本 1.13.0 才将代码 308 视为重定向。</p>
</div></div>
<p>当且仅当当前级别上没有定义<code>error_page</code>指令时，这些指令才从上一级继承。</p>
<p><a href="" id="etag"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>etag on | off;</code></td></tr>
<tr><td>Default:</td><td><code>etag on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 1.3.3 中。</p>
<p>为静态资源启用或禁用“ ETag”响应 Headers 字段的自动生成。</p>
<p><a href="" id="http"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>http { ... }</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>main</code></td></tr>
</tbody>
</table>
<p>提供在其中指定 HTTP 服务器指令的配置文件上下文。</p>
<p><a href="" id="if_modified_since"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>if_modified_since off | exact | before;</code></td></tr>
<tr><td>Default:</td><td><code>if_modified_since exact;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 0.7.24 中。</p>
<p>指定如何将响应的修改时间与“ If-Modified-Since”请求 Headers 字段中的时间进行比较：</p>
<ul>
<li>
<p><code>off</code></p>
<ul>
<li>“ If-Modified-Since”请求 Headers 字段被忽略(0.7.34)；</li>
</ul>
</li>
<li>
<p><code>exact</code></p>
<ul>
<li>exact match;</li>
</ul>
</li>
<li>
<p><code>before</code></p>
<ul>
<li>响应的修改时间小于或等于“ If-Modified-Since”请求 Headers 字段中的时间。</li>
</ul>
</li>
</ul>
<p><a href="" id="ignore_invalid_headers"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>ignore_invalid_headers on | off;</code></td></tr>
<tr><td>Default:</td><td><code>ignore_invalid_headers on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code></td></tr>
</tbody>
</table>
<p>控制是否应忽略名称无效的标题字段。有效名称由英文字母，数字，连字符和可能的下划线组成(由<a href="#underscores_in_headers">underscores_in_headers</a>指令控制)。</p>
<p>如果指令是在<a href="#server">server</a>级别上指定的，则仅当服务器为默认服务器时才使用其值。指定的值也适用于在相同地址和端口上侦听的所有虚拟服务器。</p>
<p><a href="" id="internal"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>internal;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>location</code></td></tr>
</tbody>
</table>
<p>指定给定位置只能用于内部请求。对于外部请求，将返回客户端错误 404(未找到)。内部请求如下：</p>
<ul>
<li>
<p>通过<a href="#error_page">error_page</a>，<a href="http-ngx_http_index_module.html#index">index</a>，<a href="http-ngx_http_random_index_module.html#random_index">random_index</a>和<a href="#try_files">try_files</a>指令重定向的请求；</p>
</li>
<li>
<p>由上游服务器通过“ X-Accel-Redirect”响应头字段重定向的请求；</p>
</li>
<li>
<p>由<a href="http-ngx_http_ssi_module.html">ngx_http_ssi_module</a>模块的“ <code>include virtual</code>”命令，<a href="http-ngx_http_addition_module.html">ngx_http_addition_module</a>模块指令以及<a href="http-ngx_http_auth_request_module.html#auth_request">auth_request</a>和<a href="http-ngx_http_mirror_module.html#mirror">mirror</a>指令形成的子请求；</p>
</li>
<li>
<p><a href="http-ngx_http_rewrite_module.html#rewrite">rewrite</a>指令更改了请求。</p>
</li>
</ul>
<p>Example:</p>
<pre><code class="hljs language-shell">error_page 404 /404.html;

location = /404.html {
    internal;
}
</code></pre>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>每个请求限制为 10 个内部重定向，以防止在错误的配置中可能发生请求处理周期。如果达到此限制，则返回错误 500(内部服务器错误)。在这种情况下，可以在错误日志中看到“重写或内部重定向周期”消息。</p>
</div></div>
<p><a href="" id="keepalive_disable"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>keepalive_disable none | browser ...;</code></td></tr>
<tr><td>Default:</td><td><code>keepalive_disable msie6;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>禁用行为异常的浏览器的保持活动连接。 <code>browser</code>参数指定将影响哪些浏览器。收到 POST 请求后，值<code>msie6</code>将禁用与旧版本 MSIE 的保持活动连接。值<code>safari</code>禁用与 macOS 和类似 macOS 的 os 上的 Safari 和类似 Safari 的浏览器保持活动连接。值<code>none</code>启用与所有浏览器的保持活动连接。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 1.1.18 版之前，值<code>safari</code>匹配所有 os 上的所有 Safari 和类似 Safari 的浏览器，并且默认情况下禁用与它们的保持活动连接。</p>
</div></div>
<p><a href="" id="keepalive_requests"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>keepalive_requests number;</code></td></tr>
<tr><td>Default:</td><td><code>keepalive_requests 100;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 0.8.0 中。</p>
<p>设置可以通过一个保持活动连接服务的最大请求数。发出最大数量的请求后，将关闭连接。</p>
<p>要释放每个连接的内存分配，必须定期关闭连接。因此，使用过多的最大请求数可能会导致过多的内存使用，因此不建议这样做。</p>
<p><a href="" id="keepalive_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>keepalive_timeout timeout [header_timeout];</code></td></tr>
<tr><td>Default:</td><td><code>keepalive_timeout 75s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>第一个参数设置超时，在此期间，保持活动的客户端连接将在服务器端保持打开状态。零值将禁用保持活动状态的客户端连接。可选的第二个参数在“ Keep-Alive：timeout = <code>time</code>”响应 Headers 字段中设置一个值。两个参数可能不同。</p>
<p>Mozilla 和 Konqueror 可以识别“ Keep-Alive：timeout = <code>time</code>”标题字段。 MSIE 会在大约 60 秒内自行关闭保持活动的连接。</p>
<p><a href="" id="large_client_header_buffers"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>large_client_header_buffers number size;</code></td></tr>
<tr><td>Default:</td><td><code>large_client_header_buffers 4 8k;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code></td></tr>
</tbody>
</table>
<p>设置用于读取大型客户端请求 Headers 的缓冲区的最大<code>number</code>和<code>size</code>。请求行不能超过一个缓冲区的大小，否则会向客户端返回 414(请求 URI 太大)错误。请求 Headers 字段也不能超过一个缓冲区的大小，否则将 400(错误请求)错误返回给客户端。缓冲区仅按需分配。默认情况下，缓冲区大小等于 8K 字节。如果在请求处理结束之后，连接转换为保持活动状态，则会释放这些缓冲区。</p>
<p><a href="" id="limit_except"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>limit_except method ... { ... }</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>location</code></td></tr>
</tbody>
</table>
<p>限制位置内允许的 HTTP 方法。 <code>method</code>参数可以是以下之一：<code>GET</code>，<code>HEAD</code>，<code>POST</code>，<code>PUT</code>，<code>DELETE</code>，<code>MKCOL</code>，<code>COPY</code>，<code>MOVE</code>，<code>OPTIONS</code>，<code>PROPFIND</code>，<code>PROPPATCH</code>，<code>LOCK</code>，<code>UNLOCK</code>或<code>PATCH</code>。允许<code>GET</code>方法也允许<code>HEAD</code>方法。可以使用<a href="http-ngx_http_access_module.html">ngx_http_access_module</a>，<a href="http-ngx_http_auth_basic_module.html">ngx_http_auth_basic_module</a>和<a href="http-ngx_http_auth_jwt_module.html">ngx_http_auth_jwt_module</a>(1.13.10)模块指令来限制对其他方法的访问：</p>
<pre><code class="hljs language-shell">limit_except GET {
    allow 192.168.1.0/32;
    deny  all;
}
</code></pre>
<p>请注意，这将限制对所有方法的访问， **** 和 HEAD 除外。</p>
<p><a href="" id="limit_rate"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>limit_rate rate;</code></td></tr>
<tr><td>Default:</td><td><code>limit_rate 0;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code> , <code>if in location</code></td></tr>
</tbody>
</table>
<p>限制向客户端传输响应的速率。 <code>rate</code>以每秒字节数指定。零值禁用速率限制。该限制是根据请求设置的，因此，如果客户端同时打开两个连接，则总速率将是指定限制的两倍。</p>
<p>参数值可以包含变量(1.17.0)。在应根据特定条件限制费率的情况下，这可能会很有用：</p>
<pre><code class="hljs language-shell">map $slow $rate {
    1     4k;
    2     8k;
}

limit_rate $rate;
</code></pre>
<p>也可以在<a href="#var_limit_rate">$limit_rate</a>变量中设置速率限制，但是，从版本 1.17.0 开始，不建议使用此方法：</p>
<pre><code class="hljs language-shell">server {

    if ($slow) {
        set $limit_rate 4k;
    }

    ...
}
</code></pre>
<p>速率限制也可以在代理服务器响应的“ X-Accel-Limit-Rate”Headers 字段中设置。可以使用<a href="http-ngx_http_proxy_module.html#proxy_ignore_headers">proxy_ignore_headers</a>，<a href="http-ngx_http_fastcgi_module.html#fastcgi_ignore_headers">fastcgi_ignore_headers</a>，<a href="http-ngx_http_uwsgi_module.html#uwsgi_ignore_headers">uwsgi_ignore_headers</a>和<a href="http-ngx_http_scgi_module.html#scgi_ignore_headers">scgi_ignore_headers</a>指令禁用此功能。</p>
<p><a href="" id="limit_rate_after"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>limit_rate_after size;</code></td></tr>
<tr><td>Default:</td><td><code>limit_rate_after 0;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code> , <code>if in location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 0.8.0 中。</p>
<p>设置初始数量，之后将进一步限制对客户端的响应的进一步传输。参数值可以包含变量(1.17.0)。</p>
<p>Example:</p>
<pre><code class="hljs language-shell">location /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
}
</code></pre>
<p><a href="" id="lingering_close"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>lingering_close off | on | always;</code></td></tr>
<tr><td>Default:</td><td><code>lingering_close on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在 1.1.0 和 1.0.6 版本中。</p>
<p>控制 nginx 如何关闭客户端连接。</p>
<p>默认值“ <code>on</code>”指示 nginx 在完全关闭连接之前从客户端发送<a href="#lingering_timeout">wait for</a>和<a href="#lingering_time">process</a>附加数据，但前提是启发式建议客户端可能发送更多数据。</p>
<p>值“ <code>always</code>”将使 nginx 无条件 await 并处理其他客户端数据。</p>
<p>值“ <code>off</code>”告诉 nginx 不要 await 更多数据并立即关闭连接。此行为破坏了协议，在正常情况下不应使用。</p>
<p>要控制关闭<a href="http-ngx_http_v2_module.html">HTTP/2</a>连接，必须在<a href="#server">server</a>级别(1.19.1)上指定指令。</p>
<p><a href="" id="lingering_time"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>lingering_time time;</code></td></tr>
<tr><td>Default:</td><td><code>lingering_time 30s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p><a href="#lingering_close">lingering_close</a>有效时，此指令指定 nginx 处理(读取和忽略)来自客户端的其他数据的最长时间。之后，即使有更多数据，连接也会关闭。</p>
<p><a href="" id="lingering_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>lingering_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>lingering_timeout 5s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p><a href="#lingering_close">lingering_close</a>有效时，此伪指令指定更多客户端数据到达的最大 await 时间。如果在此期间未接收到数据，则连接将关闭。否则，将读取并忽略数据，并且 nginx 开始再次 await 更多数据。重复“ wait-read-ignore”循环，但不超过<a href="#lingering_time">lingering_time</a>指令指定的时间。</p>
<p><a href="" id="listen"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];</code></td></tr>
<tr><td><br><code>listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];</code><br><code>listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];</code></td></tr>
<tr><td>默认值：</td><td><code>listen *:80 | *:8000;</code></td></tr>
<tr><td>上下文： <code>server</code></td></tr>
</tbody>
</table>
<p>为 IP 设置<code>address</code>和<code>port</code>，为服务器将在其上接受请求的 UNIX 域套接字设置<code>path</code>。可以同时指定<code>address</code>和<code>port</code>，或者只能指定<code>address</code>或只能指定<code>port</code>。 <code>address</code>也可以是主机名，例如：</p>
<pre><code class="hljs language-shell">listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
</code></pre>
<p>IPv6 地址(0.7.36)在方括号中指定：</p>
<pre><code class="hljs language-shell">listen [::]:8000;
listen [::1];
</code></pre>
<p>UNIX 域套接字(0.8.21)用“ <code>unix:</code>”前缀指定：</p>
<pre><code class="hljs language-shell">listen unix:/var/run/nginx.sock;
</code></pre>
<p>如果仅给出<code>address</code>，则使用端口 80.</p>
<p>如果该指令不存在，则如果 nginx 以超级用户特权运行，则使用<code>*:80</code>；否则使用<code>*:8000</code>。</p>
<p><code>default_server</code>参数(如果存在)将使服务器成为指定的<code>address</code>：<code>port</code>对的默认服务器。如果指令均不具有<code>default_server</code>参数，则具有<code>address</code>：<code>port</code>对的第一台服务器将是该对的默认服务器。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 0.8.21 之前的版本中，此参数简称为<code>default</code>。</p>
</div></div>
<p><code>ssl</code>参数(0.7.14)允许指定此端口上接受的所有连接均应以 SSL 模式工作。这样可以为处理 HTTP 和 HTTPS 请求的服务器提供更紧凑的<a href="http-configuring_https_servers.html#single_http_https_server">configuration</a>。</p>
<p><code>http2</code>参数(1.9.5)将端口配置为接受<a href="http-ngx_http_v2_module.html">HTTP/2</a>连接。通常，为了使其正常工作，还应该指定<code>ssl</code>参数，但是也可以将 nginx 配置为接受不带 SSL 的 HTTP/2 连接。</p>
<p><code>spdy</code>参数(1.3.15-1.9.4)允许在此端口上接受<a href="http-ngx_http_spdy_module.html">SPDY</a>连接。通常，为了使其正常工作，还应指定<code>ssl</code>参数，但是也可以将 nginx 配置为接受不带 SSL 的 SPDY 连接。</p>
<p><code>proxy_protocol</code>参数(1.5.12)允许指定此端口上接受的所有连接都应使用<a href="javascript:window.open('https://www.haproxy.org/download/1.5/doc/proxy-protocol.txt');" target="_blank" rel="noopener noreferrer">PROXY protocol</a>。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>从 1.13.11 版本开始支持 PROXY 协议版本 2.</p>
</div></div>
<p><code>listen</code>指令可以具有一些特定于套接字相关系统调用的附加参数。可以在任何<code>listen</code>指令中指定这些参数，但对于给定的<code>address</code>：<code>port</code>对只能指定一次。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 0.8.21 之前的版本中，只能在<code>listen</code>指令中与<code>default</code>参数一起指定它们。</p>
</div></div>
<ul>
<li>
<p><code>setfib</code> = <code>number</code></p>
<ul>
<li>此参数(0.8.44)设置侦听套接字的关联路由表 FIB(<code>SO_SETFIB</code>选项)。目前这仅适用于 FreeBSD。</li>
</ul>
</li>
<li>
<p><code>fastopen</code> = <code>number</code></p>
<ul>
<li>为侦听套接字(1.5.8)启用“ <a href="javascript:window.open('https://en.wikipedia.org/wiki/TCP_Fast_Open');" target="_blank" rel="noopener noreferrer">TCP 快速打开</a>”，为尚未完成三向握手的连接队列启用<a href="javascript:window.open('https://tools.ietf.org/html/rfc7413#section-5.1');" target="_blank" rel="noopener noreferrer">limits</a>的最大长度。</li>
</ul>
</li>
</ul>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>除非服务器可以多次接收到<a href="javascript:window.open('https://tools.ietf.org/html/rfc7413#section-6.1');" target="_blank" rel="noopener noreferrer">相同的 SYN 数据包</a>，否则不要启用此功能。</p>
</div></div>
<ul>
<li>
<p><code>backlog</code> = <code>number</code></p>
<ul>
<li>在<code>listen()</code>调用中设置<code>backlog</code>参数，该参数限制了挂起的连接队列的最大长度。默认情况下，<code>backlog</code>在 FreeBSD，DragonFly BSD 和 macOS 上设置为-1，在其他平台上设置为 511.</li>
</ul>
</li>
<li>
<p><code>rcvbuf</code> = <code>size</code></p>
<ul>
<li>设置侦听套接字的接收缓冲区大小(<code>SO_RCVBUF</code>选项)。</li>
</ul>
</li>
<li>
<p><code>sndbuf</code> = <code>size</code></p>
<ul>
<li>设置侦听套接字的发送缓冲区大小(<code>SO_SNDBUF</code>选项)。</li>
</ul>
</li>
<li>
<p><code>accept_filter</code> = <code>filter</code></p>
<ul>
<li>设置侦听套接字的接受筛选器的名称(<code>SO_ACCEPTFILTER</code>选项)，该筛选器在将传入的连接传递到<code>accept()</code>之前对其进行过滤。这仅适用于 FreeBSD 和 NetBSD 5.0. 可能的值为<a href="javascript:window.open('https://man.freebsd.org/accf_data');" target="_blank" rel="noopener noreferrer">dataready</a>和<a href="javascript:window.open('https://man.freebsd.org/accf_http');" target="_blank" rel="noopener noreferrer">httpready</a>。</li>
</ul>
</li>
<li>
<p><code>deferred</code></p>
<ul>
<li>指示在 Linux 上使用延迟的<code>accept()</code>(<code>TCP_DEFER_ACCEPT</code>套接字选项)。</li>
</ul>
</li>
<li>
<p><code>bind</code></p>
<ul>
<li>指示针对给定的<code>address</code>：<code>port</code>对进行单独的<code>bind()</code>呼叫。这很有用，因为如果有多个<code>listen</code>伪指令具有相同的端口但地址不同，并且<code>listen</code>伪指令之一在给定端口(<code>*:</code> <code>port</code>)的所有地址上侦听，则 nginx 将<code>bind()</code>只对<code>*:</code> <code>port</code>进行。应该注意的是，在这种情况下将进行<code>getsockname()</code>系统调用，以确定接受该连接的地址。如果使用<code>setfib</code>，<code>backlog</code>，<code>rcvbuf</code>，<code>sndbuf</code>，<code>accept_filter</code>，<code>deferred</code>，<code>ipv6only</code>或<code>so_keepalive</code>参数，则对于给定的<code>address</code>：<code>port</code>对，将始终进行单独的<code>bind()</code>调用。</li>
</ul>
</li>
<li>
<p><code>ipv6only</code> = <code>on</code> | <code>off</code></p>
<ul>
<li>此参数(0.7.42)(通过<code>IPV6_V6ONLY</code>套接字选项)确定在通配符地址<code>[::]</code>上侦听的 IPv6 套接字是否仅接受 IPv6 连接还是接受 IPv6 和 IPv4 连接。默认情况下，此参数是打开的。启动时只能设置一次。</li>
</ul>
</li>
</ul>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在版本 1.3.4 之前的版本中，如果忽略此参数，则套接字的 os 设置有效。</p>
</div></div>
<h4 id="reuseport"><a href="#reuseport" id="reuseport"></a> reuseport</h4>
<ul>
<li>此参数(1.9.1)指示为每个工作进程创建一个单独的侦听套接字(在 Linux 3.9 和 DragonFly BSD 上使用<code>SO_REUSEPORT</code> socket 选项，在 FreeBSD 12 上使用<code>SO_REUSEPORT_LB</code>)，从而允许内核在工作进程之间分配传入的连接。当前仅在 Linux 3.9，DragonFly BSD 和 FreeBSD 12(1.15.1)上有效。</li>
</ul>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>不当使用此选项可能具有安全性<a href="javascript:window.open('http://man7.org/linux/man-pages/man7/socket.7.html');" target="_blank" rel="noopener noreferrer">implications</a>。</p>
</div></div>
<ul>
<li>
<p><code>so_keepalive</code> = <code>on</code> | <code>off</code> |[ <code>keepidle</code> ]:[ <code>keepintvl</code> ]:[ <code>keepcnt</code> ]</p>
<ul>
<li>此参数(1.1.11)为侦听套接字配置“ TCP keepalive”行为。如果省略此参数，则 os 的设置对套接字有效。如果将其设置为值“ <code>on</code>”，则将为套接字打开<code>SO_KEEPALIVE</code>选项。如果将其设置为值“ <code>off</code>”，则套接字的<code>SO_KEEPALIVE</code>选项将关闭。某些 os 使用<code>TCP_KEEPIDLE</code>，<code>TCP_KEEPINTVL</code>和<code>TCP_KEEPCNT</code>套接字选项支持按套接字设置 TCP keepalive 参数。在此类系统(当前为 Linux 2.4，NetBSD 5 和 FreeBSD 9.0-STABLE)上，可以使用<code>keepidle</code>，<code>keepintvl</code>和<code>keepcnt</code>参数进行配置。可以省略一个或两个参数，在这种情况下，相应套接字选项的系统默认设置将生效。例如，</li>
</ul>
</li>
</ul>
<pre><code class="hljs language-shell">so_keepalive=30m::10
</code></pre>
<p>会将闲置超时(<code>TCP_KEEPIDLE</code>)设置为 30 分钟，将探测间隔(<code>TCP_KEEPINTVL</code>)保留为系统默认值，并将探测计数(<code>TCP_KEEPCNT</code>)设置为 10 个探测。</p>
<p>Example:</p>
<pre><code class="hljs language-shell">listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
</code></pre>
<p><a href="" id="location"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>location [ = | ~ | ~* | ^~ ] uri { ... }</code></td></tr>
<tr><td><br><code>location @name { ... }</code></td></tr>
<tr><td>默认值：</td><td>—</td></tr>
<tr><td>上下文： <code>server</code>，<code>location</code></td></tr>
</tbody>
</table>
<p>根据请求 URI 设置配置。</p>
<p>在对以“ <code>%XX</code>”形式编码的文本进行解码，将对相对路径分量“ <code>.</code>”和“ <code>..</code>”以及两个或多个相邻斜杠的可能<a href="#merge_slashes">compression</a>的引用解析为单个斜杠之后，针对标准化 URI 执行匹配。</p>
<p>位置可以由前缀字符串或正则表达式定义。正则表达式由前面的“ <code>~*</code>”修饰符(不区分大小写的匹配)或“ <code>~</code>”修饰符(不区分大小写的匹配)指定。为了找到与给定请求匹配的位置，nginx 首先检查使用前缀字符串定义的位置(前缀位置)。其中，选择并记住具有最长匹配前缀的位置。然后按照在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一个匹配项上终止，并使用相应的配置。如果未找到与正则表达式匹配的内容，则使用前面记住的前缀位置的配置。</p>
<p>可以嵌套<code>location</code>个块，下面会提到一些 exception。</p>
<p>对于不区分大小写的 os，例如 macOS 和 Cygwin，与前缀字符串匹配将忽略大小写(0.7.7)。但是，比较仅限于一字节的语言环境。</p>
<p>正则表达式可以包含捕获(0.7.40)，这些捕获以后可以在其他指令中使用。</p>
<p>如果最长的匹配前缀位置具有“ <code>^~</code>”修饰符，则不检查正则表达式。</p>
<p>同样，使用“ <code>=</code>”修饰符可以定义 URI 和位置的精确匹配。如果找到完全匹配的内容，搜索将终止。例如，如果“ <code>/</code>”请求频繁发生，则定义“ <code>location = /</code>”将加快这些请求的处理速度，因为搜索将在第一次比较后立即终止。这样的位置显然不能包含嵌套位置。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 0.7.1 到 0.8.41 的版本中，如果请求匹配的前缀位置没有“ <code>=</code>”和“ <code>^~</code>”修饰符，则搜索也将终止，并且不检查正则表达式。</p>
</div></div>
<p>让我们通过一个例子说明以上内容：</p>
<pre><code class="hljs language-shell">location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}
</code></pre>
<p>“ <code>/</code>”请求将与配置 A 相匹配，“ <code>/index.html</code>”请求将与配置 B 相匹配，“ <code>/documents/document.html</code>”请求将与配置 C 相匹配，“ <code>/images/1.gif</code>”请求将与配置 D 相匹配，而“ <code>/documents/1.jpg</code>”请求将与配置 E 相匹配。 。</p>
<p>“ <code>@</code>”前缀定义命名位置。这样的位置不用于常规请求处理，而是用于请求重定向。它们不能嵌套，也不能包含嵌套位置。</p>
<p>如果位置由以斜杠字符结尾的前缀字符串定义，并且请求由<a href="http-ngx_http_proxy_module.html#proxy_pass">proxy_pass</a>，<a href="http-ngx_http_fastcgi_module.html#fastcgi_pass">fastcgi_pass</a>，<a href="http-ngx_http_uwsgi_module.html#uwsgi_pass">uwsgi_pass</a>，<a href="http-ngx_http_scgi_module.html#scgi_pass">scgi_pass</a>，<a href="http-ngx_http_memcached_module.html#memcached_pass">memcached_pass</a>或<a href="http-ngx_http_grpc_module.html#grpc_pass">grpc_pass</a>之一处理，则将执行特殊处理。响应 URI 等于此字符串但不带斜杠的请求，带有代码 301 的永久重定向将返回到请求的 URI，并附加斜杠。如果不希望这样，则可以这样定义 URI 和位置的完全匹配：</p>
<pre><code class="hljs language-shell">location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}
</code></pre>
<p><a href="" id="log_not_found"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>log_not_found on | off;</code></td></tr>
<tr><td>Default:</td><td><code>log_not_found on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>启用或禁用将未找到的文件的错误记录到<a href="ngx_core_module.html#error_log">error_log</a>。</p>
<p><a href="" id="log_subrequest"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>log_subrequest on | off;</code></td></tr>
<tr><td>Default:</td><td><code>log_subrequest off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>启用或禁用将子请求记录到<a href="http-ngx_http_log_module.html#access_log">access_log</a>。</p>
<p><a href="" id="max_ranges"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>max_ranges number;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 1.1.2 中。</p>
<p>限制字节范围请求中允许的最大范围数。超出限制的请求将被视为没有指定字节范围。默认情况下，范围数不受限制。零值将完全禁用字节范围支持。</p>
<p><a href="" id="merge_slashes"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>merge_slashes on | off;</code></td></tr>
<tr><td>Default:</td><td><code>merge_slashes on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code></td></tr>
</tbody>
</table>
<p>启用或禁用将 URI 中的两个或多个相邻斜杠压缩为单个斜杠。</p>
<p>请注意，压缩对于正确匹配前缀字符串和正则表达式位置至关重要。没有它，“ <code>//scripts/one.php</code>”请求将不匹配</p>
<pre><code class="hljs language-shell">location /scripts/ {
    ...
}
</code></pre>
<p>并且可能会作为静态文件处理。因此将其转换为“ <code>/scripts/one.php</code>”。</p>
<p>如果 URI 包含 base64 编码的名称，则有必要将压缩<code>off</code>设为必需，因为 base64 在内部使用“ <code>/</code>”字符。但是，出于安全考虑，最好避免关闭压缩。</p>
<p>如果指令是在<a href="#server">server</a>级别上指定的，则仅当服务器为默认服务器时才使用其值。指定的值也适用于在相同地址和端口上侦听的所有虚拟服务器。</p>
<p><a href="" id="msie_padding"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>msie_padding on | off;</code></td></tr>
<tr><td>Default:</td><td><code>msie_padding on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>为状态大于 400 的 MSIE 客户端启用或禁用为响应添加注释，以将响应大小增加到 512 字节。</p>
<p><a href="" id="msie_refresh"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>msie_refresh on | off;</code></td></tr>
<tr><td>Default:</td><td><code>msie_refresh off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>启用或禁用 MSIE 客户端的发布刷新而不是重定向。</p>
<p><a href="" id="open_file_cache"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>open_file_cache off;</code></td></tr>
<tr><td><br><code>open_file_cache max=N [inactive=time];</code></td></tr>
<tr><td>默认值：</td><td><code>open_file_cache off;</code></td></tr>
<tr><td>上下文： <code>http</code>，<code>server</code>，<code>location</code></td></tr>
</tbody>
</table>
<p>配置可以存储以下内容的缓存：</p>
<ul>
<li>
<p>打开文件 Descriptors，它们的大小和修改时间；</p>
</li>
<li>
<p>有关目录存在的信息；</p>
</li>
<li>
<p>文件查找错误，例如“找不到文件”，“没有读取权限”等。</p>
</li>
</ul>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>应该通过<a href="#open_file_cache_errors">open_file_cache_errors</a>指令分别启用错误缓存。</p>
</div></div>
<p>该指令具有以下参数：</p>
<ul>
<li>
<p><code>max</code></p>
<ul>
<li>设置缓存中元素的最大数量；在高速缓存溢出时，将删除最近最少使用(LRU)元素；</li>
</ul>
</li>
<li>
<p><code>inactive</code></p>
<ul>
<li>定义一个时间，如果在这段时间内没有访问过元素，则从缓存中删除该元素；默认为 60 秒；</li>
</ul>
</li>
<li>
<p><code>off</code></p>
<ul>
<li>禁用缓存。</li>
</ul>
</li>
</ul>
<p>Example:</p>
<pre><code class="hljs language-shell">open_file_cache          max=1000 inactive=20s;
open_file_cache_valid    30s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;
</code></pre>
<p><a href="" id="open_file_cache_errors"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>open_file_cache_errors on | off;</code></td></tr>
<tr><td>Default:</td><td><code>open_file_cache_errors off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>启用或禁用<a href="#open_file_cache">open_file_cache</a>缓存文件查找错误。</p>
<p><a href="" id="open_file_cache_min_uses"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>open_file_cache_min_uses number;</code></td></tr>
<tr><td>Default:</td><td><code>open_file_cache_min_uses 1;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置在<a href="#open_file_cache">open_file_cache</a>指令的<code>inactive</code>参数配置的时间段内文件访问的最小<code>number</code>，文件 Descriptors 在高速缓存中保持打开状态所需。</p>
<p><a href="" id="open_file_cache_valid"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>open_file_cache_valid time;</code></td></tr>
<tr><td>Default:</td><td><code>open_file_cache_valid 60s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置一个时间，之后应验证<a href="#open_file_cache">open_file_cache</a>个元素。</p>
<p><a href="" id="output_buffers"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>output_buffers number size;</code></td></tr>
<tr><td>Default:</td><td><code>output_buffers 2 32k;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置用于从磁盘读取响应的缓冲区的<code>number</code>和<code>size</code>。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 1.9.5 之前的版本中，默认值为 1 32k。</p>
</div></div>
<p><a href="" id="port_in_redirect"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>port_in_redirect on | off;</code></td></tr>
<tr><td>Default:</td><td><code>port_in_redirect on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>启用或禁用 nginx 发出的<a href="#absolute_redirect">absolute</a>重定向中指定端口。</p>
<p>重定向中主要服务器名称的使用由<a href="#server_name_in_redirect">server_name_in_redirect</a>指令控制。</p>
<p><a href="" id="postpone_output"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>postpone_output size;</code></td></tr>
<tr><td>Default:</td><td><code>postpone_output 1460;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>如果可能的话，客户端数据的传输将被推迟，直到 nginx 至少有<code>size</code>个字节的数据要发送。零值禁用延迟数据传输。</p>
<p><a href="" id="read_ahead"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>read_ahead size;</code></td></tr>
<tr><td>Default:</td><td><code>read_ahead 0;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置使用文件时内核的预读量。</p>
<p>在 Linux 上，使用<code>posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)</code>系统调用，因此<code>size</code>参数将被忽略。</p>
<p>在 FreeBSD 上，使用了从 FreeBSD 9.0-CURRENT 开始受支持的<code>fcntl(O_READAHEAD,</code> <code>size</code> <code>)</code>系统调用。 FreeBSD 7 必须为<a href="static/file/patch.readahead.txt" target="_blank" rel="noopener noreferrer">patched</a>。</p>
<p><a href="" id="recursive_error_pages"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>recursive_error_pages on | off;</code></td></tr>
<tr><td>Default:</td><td><code>recursive_error_pages off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>启用或禁用使用<a href="#error_page">error_page</a>指令进行多次重定向。此类重定向的数量为<a href="#internal">limited</a>。</p>
<p><a href="" id="request_pool_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>request_pool_size size;</code></td></tr>
<tr><td>Default:</td><td><code>request_pool_size 4k;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code></td></tr>
</tbody>
</table>
<p>允许精确调整每个请求的内存分配。该指令对性能的影响最小，一般不应使用。</p>
<p><a href="" id="reset_timedout_connection"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>reset_timedout_connection on | off;</code></td></tr>
<tr><td>Default:</td><td><code>reset_timedout_connection off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>使用非标准代码 444(1.15.2)启用或禁用重置超时的连接和连接<a href="http-ngx_http_rewrite_module.html#return">closed</a>。重置执行如下。在关闭套接字之前，将其上的<code>SO_LINGER</code>选项设置为超时值 0.关闭套接字后，会将 TCP RST 发送到客户端，并释放该套接字占用的所有内存。这有助于避免将已经关闭且具有已填充缓冲区的套接字长时间保持在 FIN_WAIT1 状态。</p>
<p>应该注意的是，超时的保持活动连接通常是关闭的。</p>
<p><a href="" id="resolver"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>resolver address ... [valid=time] [ipv6=on|off] [status_zone=zone];</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>配置用于将上游服务器的名称解析为地址的名称服务器，例如：</p>
<pre><code class="hljs language-shell">resolver 127.0.0.1 [::1]:5353;
</code></pre>
<p>可以使用可选端口(1.3.1，1.2.2)将地址指定为域名或 IP 地址。如果未指定端口，则使用端口 53.以循环方式查询名称服务器。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在版本 1.1.7 之前，只能配置一个名称服务器。从版本 1.3.1 和 1.2.2 开始，支持使用 IPv6 地址指定名称服务器。</p>
</div></div>
<p><a href="" id="resolver_ipv6"></a></p>
<p>默认情况下，nginx 在解析时将同时查找 IPv4 和 IPv6 地址。如果不需要查找 IPv6 地址，则可以指定<code>ipv6=off</code>参数。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>从版本 1.5.8 开始，支持将名称解析为 IPv6 地址。</p>
</div></div>
<p><a href="" id="resolver_valid"></a></p>
<p>默认情况下，nginx 使用响应的 TTL 值缓存答案。可选的<code>valid</code>参数允许覆盖它：</p>
<pre><code class="hljs language-shell">resolver 127.0.0.1 [::1]:5353 valid=30s;
</code></pre>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 1.1.9 版之前，无法调整缓存时间，nginx 始终将答案缓存 5 分钟。</p>
</div></div><div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>为防止 DNS 欺骗，建议在适当安全的受信任本地网络中配置 DNS 服务器。</p>
</div></div>
<p><a href="" id="resolver_status_zone"></a></p>
<p>可选的<code>status_zone</code>参数(1.17.1)启用<a href="http-ngx_http_api_module.html#resolvers_">collection</a>的 DNS 服务器统计信息，用于指定<code>zone</code>中的请求和响应。该参数可作为<a href="javascript:window.open('https://nginx.com/products/');" target="_blank" rel="noopener noreferrer">commercial subscription</a>的一部分使用。</p>
<p><a href="" id="resolver_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>resolver_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>resolver_timeout 30s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置名称解析超时，例如：</p>
<pre><code class="hljs language-shell">resolver_timeout 5s;
</code></pre>
<p><a href="" id="root"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>root path;</code></td></tr>
<tr><td>Default:</td><td><code>root html;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code> , <code>if in location</code></td></tr>
</tbody>
</table>
<p>设置请求的根目录。例如，使用以下配置</p>
<pre><code class="hljs language-shell">location /i/ {
    root /data/w3;
}
</code></pre>
<p><code>/data/w3/i/top.gif</code>文件将作为对“ <code>/i/top.gif</code>”请求的响应而发送。</p>
<p><code>path</code>值可以包含<code>$document_root</code>和<code>$realpath_root</code>除外的变量。</p>
<p>只需将 URI 添加到<code>root</code>指令的值即可构造文件的路径。如果必须修改 URI，则应使用<a href="#alias">alias</a>指令。</p>
<p><a href="" id="satisfy"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>satisfy all | any;</code></td></tr>
<tr><td>Default:</td><td><code>satisfy all;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>如果<a href="http-ngx_http_access_module.html">ngx_http_access_module</a>，<a href="http-ngx_http_auth_basic_module.html">ngx_http_auth_basic_module</a>，<a href="http-ngx_http_auth_request_module.html">ngx_http_auth_request_module</a>或<a href="http-ngx_http_auth_jwt_module.html">ngx_http_auth_jwt_module</a>模块的全部(<code>all</code>)或至少一个(<code>any</code>)允许访问，则允许访问。</p>
<p>Example:</p>
<pre><code class="hljs language-shell">location / {
    satisfy any;

    allow 192.168.1.0/32;
    deny  all;

    auth_basic           &quot;closed site&quot;;
    auth_basic_user_file conf/htpasswd;
}
</code></pre>
<p><a href="" id="send_lowat"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>send_lowat size;</code></td></tr>
<tr><td>Default:</td><td><code>send_lowat 0;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>如果指令设置为非零值，nginx 将尝试通过使用<a href="events.html#kqueue">kqueue</a>方法的<code>NOTE_LOWAT</code>标志或<code>SO_SNDLOWAT</code>套接字选项来最小化客户端套接字上的发送操作数量。在这两种情况下，都使用指定的<code>size</code>。</p>
<p>在 Linux，Solaris 和 Windows 上，此伪指令将被忽略。</p>
<p><a href="" id="send_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>send_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>send_timeout 60s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置将响应传输到客户端的超时时间。超时仅在两个连续的写操作之间设置，而不用于整个响应的传输。如果客户端在此时间内未收到任何信息，则连接将关闭。</p>
<p><a href="" id="sendfile"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>sendfile on | off;</code></td></tr>
<tr><td>Default:</td><td><code>sendfile off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code> , <code>if in location</code></td></tr>
</tbody>
</table>
<p>启用或禁用<code>sendfile()</code>的使用。</p>
<p>从 nginx 0.8.12 和 FreeBSD 5.2.1 开始，<a href="#aio">aio</a>可用于预加载<code>sendfile()</code>的数据：</p>
<pre><code class="hljs language-shell">location /video/ {
    sendfile       on;
    tcp_nopush     on;
    aio            on;
}
</code></pre>
<p>在此配置中，使用<code>SF_NODISKIO</code>标志调用<code>sendfile()</code>，这将导致它不会在磁盘 I/O 上阻塞，而是报告该数据不在内存中。然后，nginx 通过读取一个字节来启动异步数据加载。第一次读取时，FreeBSD 内核将文件的前 128K 字节加载到内存中，尽管接下来的读取只会加载 16K 块中的数据。可以使用<a href="#read_ahead">read_ahead</a>指令更改此设置。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 1.7.11 版之前，可以使用<code>aio sendfile;</code>启用预加载。</p>
</div></div>
<p><a href="" id="sendfile_max_chunk"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>sendfile_max_chunk size;</code></td></tr>
<tr><td>Default:</td><td><code>sendfile_max_chunk 0;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置为非零值时，将限制单个<code>sendfile()</code>调用中可以传输的数据量。没有限制，一个快速连接可能会完全占用工作进程。</p>
<p><a href="" id="server"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>server { ... }</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code></td></tr>
</tbody>
</table>
<p>设置虚拟服务器的配置。基于 IP 的虚拟服务器(基于 IP 地址)和基于名称的虚拟服务器(基于“主机”请求 Headers 字段)之间没有明确区分。相反，<a href="#listen">listen</a>指令描述了应该接受服务器连接的所有地址和端口，而<a href="#server_name">server_name</a>指令列出了所有服务器名称。 “ <a href="http-request_processing.html">Nginx 如何处理请求</a>”文档中提供了示例配置。</p>
<p><a href="" id="server_name"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>server_name name ...;</code></td></tr>
<tr><td>Default:</td><td><code>server_name &quot;&quot;;</code></td></tr>
<tr><td>Context:</td><td><code>server</code></td></tr>
</tbody>
</table>
<p>设置虚拟服务器的名称，例如：</p>
<pre><code class="hljs language-shell">server {
    server_name example.com www.example.com;
}
</code></pre>
<p>名字将成为主服务器名称。</p>
<p>服务器名称可以包含一个星号(“ <code>*</code>”)来替换名称的第一部分或最后一部分：</p>
<pre><code class="hljs language-shell">server {
    server_name example.com *.example.com www.example.*;
}
</code></pre>
<p>这样的名称称为通配符名称。</p>
<p>上面提到的前两个名称可以合并为一个：</p>
<pre><code class="hljs language-shell">server {
    server_name .example.com;
}
</code></pre>
<p>还可以在服务器名称中使用正则表达式，该名称前带有波浪号(“ <code>~</code>”)：</p>
<pre><code class="hljs language-shell">server {
    server_name www.example.com ~^www\d+\.example\.com$;
}
</code></pre>
<p>正则表达式可以包含捕获(0.7.40)，以后可以在其他指令中使用它们：</p>
<pre><code class="hljs language-shell">server {
    server_name ~^(www\.)?(.+)$;

    location / {
        root /sites/$2;
    }
}

server {
    server_name _;

    location / {
        root /sites/default;
    }
}
</code></pre>
<p>正则表达式中的命名捕获会创建变量(0.8.25)，这些变量以后可在其他指令中使用：</p>
<pre><code class="hljs language-shell">server {
    server_name ~^(www\.)?(?&lt;domain&gt;.+)$;

    location / {
        root /sites/$domain;
    }
}

server {
    server_name _;

    location / {
        root /sites/default;
    }
}
</code></pre>
<p>如果指令的参数设置为“ <code>$hostname</code>”(0.9.4)，则会插入计算机的主机名。</p>
<p>还可以指定一个空服务器名称(0.7.11)：</p>
<pre><code class="hljs language-shell">server {
    server_name www.example.com &quot;&quot;;
}
</code></pre>
<p>它允许该服务器处理给定 address：port 对的不带“ Host”头域的请求，而不是默认服务器。这是默认设置。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 0.8.48 之前，默认情况下使用计算机的主机名。</p>
</div></div>
<p>在按名称搜索虚拟服务器的过程中，如果名称与多个指定的变体匹配(例如，通配符名称和正则表达式匹配)，则将按照以下优先级顺序选择第一个匹配的变体：</p>
<ul>
<li>
<p>确切的名字</p>
</li>
<li>
<p>以星号开头的最长通配符名称，例如“ <code>*.example.com</code>”</p>
</li>
<li>
<p>以星号结尾的最长通配符名称，例如“ <code>mail.*</code>”</p>
</li>
<li>
<p>第一个匹配的正则表达式(按在配置文件中出现的顺序)</p>
</li>
</ul>
<p>服务器名称的详细说明在单独的<a href="http-server_names.html">Server names</a>文档中提供。</p>
<p><a href="" id="server_name_in_redirect"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>server_name_in_redirect on | off;</code></td></tr>
<tr><td>Default:</td><td><code>server_name_in_redirect off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>在 ng 发出的<a href="#server_name">absolute</a>重定向中启用或禁用<a href="#absolute_redirect">server_name</a>指令指定的主服务器名称。禁止使用主服务器名称时，将使用“主机”请求 Headers 字段中的名称。如果不存在此字段，则使用服务器的 IP 地址。</p>
<p>重定向中端口的使用由<a href="#port_in_redirect">port_in_redirect</a>指令控制。</p>
<p><a href="" id="server_names_hash_bucket_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>server_names_hash_bucket_size size;</code></td></tr>
<tr><td>Default:</td><td><code>server_names_hash_bucket_size 32|64|128;</code></td></tr>
<tr><td>Context:</td><td><code>http</code></td></tr>
</tbody>
</table>
<p>设置服务器名称哈希表的存储桶大小。默认值取决于处理器的缓存行的大小。设置哈希表的详细信息在单独的<a href="hash.html">document</a>中提供。</p>
<p><a href="" id="server_names_hash_max_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>server_names_hash_max_size size;</code></td></tr>
<tr><td>Default:</td><td><code>server_names_hash_max_size 512;</code></td></tr>
<tr><td>Context:</td><td><code>http</code></td></tr>
</tbody>
</table>
<p>设置服务器名称哈希表的最大<code>size</code>。设置哈希表的详细信息在单独的<a href="hash.html">document</a>中提供。</p>
<p><a href="" id="server_tokens"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>server_tokens on | off | build | string;</code></td></tr>
<tr><td>Default:</td><td><code>server_tokens on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>在错误页面和“服务器”响应标题字段中启用或禁用运行 Nginx 版本。</p>
<p><a href="" id="server_tokens_build"></a></p>
<p><code>build</code>参数(1.11.10)可以与 nginx 版本一起发出<a href="configure.html#build">build name</a>。</p>
<p>此外，作为<a href="javascript:window.open('https://nginx.com/products/');" target="_blank" rel="noopener noreferrer">commercial subscription</a>的一部分，从 1.9.13 版本开始，可以使用带有变量的<code>string</code>显式设置错误页面上的签名和“服务器”响应 Headers 字段值。空字符串将禁用“服务器”字段的运行。</p>
<p><a href="" id="subrequest_output_buffer_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>subrequest_output_buffer_size size;</code></td></tr>
<tr><td>Default:</td><td><code>subrequest_output_buffer_size 4k|8k;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在版本 1.13.10 中。</p>
<p>设置用于存储子请求的响应主体的缓冲区的<code>size</code>。默认情况下，缓冲区大小等于一个内存页。根据平台的不同，它可以是 4K 或 8K。但是，它可以做得更小。</p>
<p>该指令仅适用于将响应主体保存到内存中的子请求。例如，此类子请求由<a href="http-ngx_http_ssi_module.html#ssi_include_set">SSI</a>创建。</p>
<p><a href="" id="tcp_nodelay"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>tcp_nodelay on | off;</code></td></tr>
<tr><td>Default:</td><td><code>tcp_nodelay on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>启用或禁用<code>TCP_NODELAY</code>选项的使用。当连接转换为保持活动状态时，将启用该选项。此外，它在 SSL 连接，无缓冲代理和<a href="http-websocket.html">WebSocket</a>代理中启用。</p>
<p><a href="" id="tcp_nopush"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>tcp_nopush on | off;</code></td></tr>
<tr><td>Default:</td><td><code>tcp_nopush off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>在 FreeBSD 上启用或禁用<code>TCP_NOPUSH</code>套接字选项，在 Linux 上启用或禁用<code>TCP_CORK</code>套接字选项。仅当使用<a href="#sendfile">sendfile</a>时才启用这些选项。启用该选项可以</p>
<ul>
<li>
<p>在 Linux 和 FreeBSD 4. *上，以一个包的形式发送响应头和文件的开头。</p>
</li>
<li>
<p>以完整的数据包发送文件。</p>
</li>
</ul>
<p><a href="" id="try_files"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>try_files file ... uri;</code></td></tr>
<tr><td><br><code>try_files file ... =code;</code></td></tr>
<tr><td>默认值：</td><td>—</td></tr>
<tr><td>上下文： <code>server</code>，<code>location</code></td></tr>
</tbody>
</table>
<p>按指定顺序检查文件是否存在，并使用找到的第一个文件进行请求处理；该处理在当前上下文中执行。文件的路径是根据<a href="#root">root</a>和<a href="#alias">alias</a>指令从<code>file</code>参数构造的。可以通过在名称末尾指定斜杠来检查目录是否存在，例如“ <code>$uri/</code>”。如果未找到任何文件，则进行内部重定向到最后一个参数中指定的<code>uri</code>。例如：</p>
<pre><code class="hljs language-shell">location /images/ {
    try_files $uri /images/default.gif;
}

location = /images/default.gif {
    expires 30s;
}
</code></pre>
<p>最后一个参数也可以指向一个命名的位置，如下面的示例所示。从版本 0.7.51 开始，最后一个参数也可以是<code>code</code>：</p>
<pre><code class="hljs language-shell">location / {
    try_files $uri $uri/index.html $uri.html =404;
}
</code></pre>
<p>代理 Mongrel 的示例：</p>
<pre><code class="hljs language-shell">location / {
    try_files /system/maintenance.html
              $uri $uri/index.html $uri.html
              @mongrel;
}

location @mongrel {
    proxy_pass http://mongrel;
}
</code></pre>
<p>Drupal/FastCGI 的示例：</p>
<pre><code class="hljs language-shell">location / {
    try_files $uri $uri/ @drupal;
}

location ~ \.php$ {
    try_files $uri @drupal;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
    fastcgi_param QUERY_STRING    $args;

    ... other fastcgi_param's
}

location @drupal {
    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    fastcgi_param SCRIPT_NAME     /index.php;
    fastcgi_param QUERY_STRING    q=$uri&amp;$args;

    ... other fastcgi_param's
}
</code></pre>
<p>在以下示例中，</p>
<pre><code class="hljs language-shell">location / {
    try_files $uri $uri/ @drupal;
}
</code></pre>
<p><code>try_files</code>指令等效于</p>
<pre><code class="hljs language-shell">location / {
    error_page 404 = @drupal;
    log_not_found off;
}
</code></pre>
<p>And here,</p>
<pre><code class="hljs language-shell">location ~ \.php$ {
    try_files $uri @drupal;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;

    ...
}
</code></pre>
<p><code>try_files</code>在将请求传递给 FastCGI 服务器之前检查 PHP 文件是否存在。</p>
<p>Wordpress 和 Joomla 的示例：</p>
<pre><code class="hljs language-shell">location / {
    try_files $uri $uri/ @wordpress;
}

location ~ \.php$ {
    try_files $uri @wordpress;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    ... other fastcgi_param's
}

location @wordpress {
    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    ... other fastcgi_param's
}
</code></pre>
<p><a href="" id="types"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>types { ... }</code></td></tr>
<tr><td>Default:</td><td>types {</td></tr>
<tr><td><br>text/html html;<br>图片/ gif gif；<br>image/jpeg jpg;<br>}</td></tr>
<tr><td>上下文： <code>http</code>，<code>server</code>，<code>location</code></td></tr>
</tbody>
</table>
<p>将文件 extensions 映射到响应的 MIME 类型。extensions 不区分大小写。几个 extensions 可以映射为一种类型，例如：</p>
<pre><code class="hljs language-shell">types {
    application/octet-stream bin exe dll;
    application/octet-stream deb;
    application/octet-stream dmg;
}
</code></pre>
<p>在<code>conf/mime.types</code>文件中使用 nginx 分发了足够完整的映射表。</p>
<p>要使特定位置为所有请求发出“ <code>application/octet-stream</code>” MIME 类型，可以使用以下配置：</p>
<pre><code class="hljs language-shell">location /download/ {
    types        { }
    default_type application/octet-stream;
}
</code></pre>
<p><a href="" id="types_hash_bucket_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>types_hash_bucket_size size;</code></td></tr>
<tr><td>Default:</td><td><code>types_hash_bucket_size 64;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置类型哈希表的存储桶大小。设置哈希表的详细信息在单独的<a href="hash.html">document</a>中提供。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 1.5.13 版本之前，默认值取决于处理器的缓存行的大小。</p>
</div></div>
<p><a href="" id="types_hash_max_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>types_hash_max_size size;</code></td></tr>
<tr><td>Default:</td><td><code>types_hash_max_size 1024;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置类型哈希表的最大<code>size</code>。设置哈希表的详细信息在单独的<a href="hash.html">document</a>中提供。</p>
<p><a href="" id="underscores_in_headers"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>underscores_in_headers on | off;</code></td></tr>
<tr><td>Default:</td><td><code>underscores_in_headers off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code></td></tr>
</tbody>
</table>
<p>在客户端请求 Headers 字段中启用或禁用下划线。禁止使用下划线时，名称中包含下划线的请求 Headers 字段将被标记为无效并受<a href="#ignore_invalid_headers">ignore_invalid_headers</a>指令约束。</p>
<p>如果指令是在<a href="#server">server</a>级别上指定的，则仅当服务器为默认服务器时才使用其值。指定的值也适用于在相同地址和端口上侦听的所有虚拟服务器。</p>
<p><a href="" id="variables_hash_bucket_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>variables_hash_bucket_size size;</code></td></tr>
<tr><td>Default:</td><td><code>variables_hash_bucket_size 64;</code></td></tr>
<tr><td>Context:</td><td><code>http</code></td></tr>
</tbody>
</table>
<p>设置变量哈希表的存储桶大小。设置哈希表的详细信息在单独的<a href="hash.html">document</a>中提供。</p>
<p><a href="" id="variables_hash_max_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>variables_hash_max_size size;</code></td></tr>
<tr><td>Default:</td><td><code>variables_hash_max_size 1024;</code></td></tr>
<tr><td>Context:</td><td><code>http</code></td></tr>
</tbody>
</table>
<p>设置变量哈希表的最大值<code>size</code>。设置哈希表的详细信息在单独的<a href="hash.html">document</a>中提供。</p>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>在 1.5.13 版之前，默认值为 512.</p>
</div></div>
<p><a href="" id="variables"></a></p>
<h4 id="embedded-variables"><a href="#embedded-variables" id="embedded-variables"></a>Embedded Variables</h4>
<p><code>ngx_http_core_module</code>模块支持名称与 Apache Server 变量匹配的嵌入式变量。首先，这些是代表客户端请求 Headers 字段的变量，例如<code>$http_user_agent</code>，<code>$http_cookie</code>等。另外还有其他变量：</p>
<h4 id="arg--name"><a href="#var_arg_" id="var_arg_"></a> $arg_ name</h4>
<ul>
<li>请求行中的参数<code>name</code></li>
</ul>
<h4 id="args"><a href="#var_args" id="var_args"></a> $args</h4>
<ul>
<li>请求行中的参数</li>
</ul>
<h4 id="binary-remote-addr"><a href="#var_binary_remote_addr" id="var_binary_remote_addr"></a> $binary_remote_addr</h4>
<ul>
<li>客户端地址(二进制形式)，对于 IPv4 地址，值的长度始终为 4 个字节，对于 IPv6 地址，值的长度始终为 16 个字节</li>
</ul>
<h4 id="body-bytes-sent"><a href="#var_body_bytes_sent" id="var_body_bytes_sent"></a> $body_bytes_sent</h4>
<ul>
<li>发送给客户端的字节数，不计算响应头；此变量与<code>mod_log_config</code> Apache 模块的“ <code>%B</code>”参数兼容</li>
</ul>
<h4 id="bytes-sent"><a href="#var_bytes_sent" id="var_bytes_sent"></a> $bytes_sent</h4>
<ul>
<li>发送给客户端的字节数(1.3.8、1.2.5)</li>
</ul>
<h4 id="connection"><a href="#var_connection" id="var_connection"></a> $connection</h4>
<ul>
<li>连接序列号(1.3.8、1.2.5)</li>
</ul>
<h4 id="connection-requests"><a href="#var_connection_requests" id="var_connection_requests"></a> $connection_requests</h4>
<ul>
<li>通过连接发出的当前请求数(1.3.8、1.2.5)</li>
</ul>
<h4 id="content-length"><a href="#var_content_length" id="var_content_length"></a> $content_length</h4>
<ul>
<li>“内容长度”请求 Headers 字段</li>
</ul>
<h4 id="content-type"><a href="#var_content_type" id="var_content_type"></a> $content_type</h4>
<ul>
<li>“Content Type”请求 Headers 字段</li>
</ul>
<h4 id="cookie--name"><a href="#var_cookie_" id="var_cookie_"></a> $cookie_ name</h4>
<ul>
<li><code>name</code> cookie</li>
</ul>
<h4 id="document-root"><a href="#var_document_root" id="var_document_root"></a> $document_root</h4>
<ul>
<li>当前请求的<a href="#root">root</a>或<a href="#alias">alias</a>指令值</li>
</ul>
<h4 id="document-uri"><a href="#var_document_uri" id="var_document_uri"></a> $document_uri</h4>
<ul>
<li>与<code>$uri</code>相同</li>
</ul>
<h4 id="host"><a href="#var_host" id="var_host"></a> $host</h4>
<ul>
<li>优先顺序如下：请求行中的主机名，或“主机”请求 Headers 字段中的主机名，或与请求匹配的服务器名</li>
</ul>
<h4 id="hostname"><a href="#var_hostname" id="var_hostname"></a> $hostname</h4>
<ul>
<li>host name</li>
</ul>
<h4 id="http--name"><a href="#var_http_" id="var_http_"></a> $http_ name</h4>
<ul>
<li>任意请求头字段；变量名称的最后一部分是将字段名称转换为小写字母，并用短划线代替下划线</li>
</ul>
<h4 id="https"><a href="#var_https" id="var_https"></a> $https</h4>
<ul>
<li>如果连接以 SSL 模式运行，则为“ <code>on</code>”，否则为空字符串</li>
</ul>
<h4 id="is-args"><a href="#var_is_args" id="var_is_args"></a> $is_args</h4>
<ul>
<li>“ <code>?</code>”(如果请求行包含参数)，否则为空字符串</li>
</ul>
<h4 id="limit-rate"><a href="#var_limit_rate" id="var_limit_rate"></a> $limit_rate</h4>
<ul>
<li>设置此变量将启用响应率限制；见<a href="#limit_rate">limit_rate</a></li>
</ul>
<h4 id="msec"><a href="#var_msec" id="var_msec"></a> $msec</h4>
<ul>
<li>以毫秒为单位的当前时间(以秒为单位)(1.3.9，1.2.6)</li>
</ul>
<h4 id="nginx-version"><a href="#var_nginx_version" id="var_nginx_version"></a> $nginx_version</h4>
<ul>
<li>nginx version</li>
</ul>
<h4 id="pid"><a href="#var_pid" id="var_pid"></a> $pid</h4>
<ul>
<li>工作进程的 PID</li>
</ul>
<h4 id="pipe"><a href="#var_pipe" id="var_pipe"></a> $pipe</h4>
<ul>
<li>如果请求已通过管道传递，则为“ <code>p</code>”，否则为“ <code>.</code>”(1.3.12、1.2.7)</li>
</ul>
<h4 id="proxy-protocol-addr"><a href="#var_proxy_protocol_addr" id="var_proxy_protocol_addr"></a> $proxy_protocol_addr</h4>
<ul>
<li>来自 PROXY 协议 Headers(1.5.12)的客户端地址</li>
</ul>
<p>必须先通过在<a href="#listen">listen</a>指令中设置<code>proxy_protocol</code>参数来启用 PROXY 协议。</p>
<h4 id="proxy-protocol-port"><a href="#var_proxy_protocol_port" id="var_proxy_protocol_port"></a> $proxy_protocol_port</h4>
<ul>
<li>PROXY 协议 Headers(1.11.0)中的客户端端口</li>
</ul>
<p>必须先通过在<a href="#listen">listen</a>指令中设置<code>proxy_protocol</code>参数来启用 PROXY 协议。</p>
<h4 id="proxy-protocol-server-addr"><a href="#var_proxy_protocol_server_addr" id="var_proxy_protocol_server_addr"></a> $proxy_protocol_server_addr</h4>
<ul>
<li>PROXY 协议 Headers 中的服务器地址(1.17.6)</li>
</ul>
<p>必须先通过在<a href="#listen">listen</a>指令中设置<code>proxy_protocol</code>参数来启用 PROXY 协议。</p>
<h4 id="proxy-protocol-server-port"><a href="#var_proxy_protocol_server_port" id="var_proxy_protocol_server_port"></a> $proxy_protocol_server_port</h4>
<ul>
<li>PROXY 协议 Headers 中的服务器端口(1.17.6)</li>
</ul>
<p>必须先通过在<a href="#listen">listen</a>指令中设置<code>proxy_protocol</code>参数来启用 PROXY 协议。</p>
<h4 id="query-string"><a href="#var_query_string" id="var_query_string"></a> $query_string</h4>
<ul>
<li>与<code>$args</code>相同</li>
</ul>
<h4 id="realpath-root"><a href="#var_realpath_root" id="var_realpath_root"></a> $realpath_root</h4>
<ul>
<li>对应于当前请求的<a href="#root">root</a>或<a href="#alias">alias</a>指令值的绝对路径名，所有符号链接都解析为真实路径</li>
</ul>
<h4 id="remote-addr"><a href="#var_remote_addr" id="var_remote_addr"></a> $remote_addr</h4>
<ul>
<li>client address</li>
</ul>
<h4 id="remote-port"><a href="#var_remote_port" id="var_remote_port"></a> $remote_port</h4>
<ul>
<li>client port</li>
</ul>
<h4 id="remote-user"><a href="#var_remote_user" id="var_remote_user"></a> $remote_user</h4>
<ul>
<li>基本身份验证随附的用户名</li>
</ul>
<h4 id="request"><a href="#var_request" id="var_request"></a> $request</h4>
<ul>
<li>完整的原始请求行</li>
</ul>
<h4 id="request-body"><a href="#var_request_body" id="var_request_body"></a> $request_body</h4>
<ul>
<li>request body</li>
</ul>
<p>当将请求正文读取到<a href="#proxy_pass">memory buffer</a>时，该变量的值可在<a href="http-ngx_http_proxy_module.html#fastcgi_pass">proxy_pass</a>，<a href="http-ngx_http_fastcgi_module.html#uwsgi_pass">fastcgi_pass</a>，<a href="http-ngx_http_uwsgi_module.html#scgi_pass">uwsgi_pass</a>和<a href="http-ngx_http_scgi_module.html#client_body_buffer_size">scgi_pass</a>指令处理的位置使用。</p>
<h4 id="request-body-file"><a href="#var_request_body_file" id="var_request_body_file"></a> $request_body_file</h4>
<ul>
<li>带有请求正文的临时文件的名称</li>
</ul>
<p>在处理结束时，需要删除文件。要始终将请求正文写入文件，需要启用<a href="#client_body_in_file_only">client_body_in_file_only</a>。当在代理请求中或在对 FastCGI/uwsgi/SCGI 服务器的请求中传递临时文件的名称时，应分别通过<a href="http-ngx_http_proxy_module.html#proxy_pass_request_body">proxy_pass_request_body off</a>，<a href="http-ngx_http_fastcgi_module.html#fastcgi_pass_request_body">fastcgi_pass_request_body off</a>，<a href="http-ngx_http_uwsgi_module.html#uwsgi_pass_request_body">uwsgi_pass_request_body off</a>或<a href="http-ngx_http_scgi_module.html#scgi_pass_request_body">scgi_pass_request_body off</a>指令禁止传递请求主体。</p>
<h4 id="request-completion"><a href="#var_request_completion" id="var_request_completion"></a> $request_completion</h4>
<ul>
<li>“ <code>OK</code>”(如果请求已完成)，否则为空字符串</li>
</ul>
<h4 id="request-filename"><a href="#var_request_filename" id="var_request_filename"></a> $request_filename</h4>
<ul>
<li>基于<a href="#root">root</a>或<a href="#alias">alias</a>指令以及请求 URI 的当前请求的文件路径</li>
</ul>
<h4 id="request-id"><a href="#var_request_id" id="var_request_id"></a> $request_id</h4>
<ul>
<li>从 16 个随机字节生成的唯一请求标识符，以十六进制(1.11.0)</li>
</ul>
<h4 id="request-length"><a href="#var_request_length" id="var_request_length"></a> $request_length</h4>
<ul>
<li>请求长度(包括请求行，Headers 和请求正文)(1.3.12，1.2.7)</li>
</ul>
<h4 id="request-method"><a href="#var_request_method" id="var_request_method"></a> $request_method</h4>
<ul>
<li>请求方法，通常是“ <code>GET</code>”或“ <code>POST</code>”</li>
</ul>
<h4 id="request-time"><a href="#var_request_time" id="var_request_time"></a> $request_time</h4>
<ul>
<li>请求以毫秒为单位的处理时间(以秒为单位)(1.3.9、1.2.6)；从客户端读取第一个字节以来经过的时间</li>
</ul>
<h4 id="request-uri"><a href="#var_request_uri" id="var_request_uri"></a> $request_uri</h4>
<ul>
<li>完整的原始请求 URI(带有参数)</li>
</ul>
<h4 id="scheme"><a href="#var_scheme" id="var_scheme"></a> $scheme</h4>
<ul>
<li>请求方案“ <code>http</code>”或“ <code>https</code>”</li>
</ul>
<h4 id="sent-http--name"><a href="#var_sent_http_" id="var_sent_http_"></a> $sent_http_ name</h4>
<ul>
<li>任意响应头域；变量名称的最后一部分是将字段名称转换为小写字母，并用短划线代替下划线</li>
</ul>
<h4 id="sent-trailer--name"><a href="#var_sent_trailer_" id="var_sent_trailer_"></a> $sent_trailer_ name</h4>
<ul>
<li>在响应末尾发送的任意字段(1.13.2)；变量名称的最后一部分是将字段名称转换为小写字母，并用短划线代替下划线</li>
</ul>
<h4 id="server-addr"><a href="#var_server_addr" id="var_server_addr"></a> $server_addr</h4>
<ul>
<li>接受请求的服务器的地址</li>
</ul>
<p>计算此变量的值通常需要一个系统调用。为避免系统调用，<a href="#listen">listen</a>指令必须指定地址并使用<code>bind</code>参数。</p>
<h4 id="server-name"><a href="#var_server_name" id="var_server_name"></a> $server_name</h4>
<ul>
<li>接受请求的服务器的名称</li>
</ul>
<h4 id="server-port"><a href="#var_server_port" id="var_server_port"></a> $server_port</h4>
<ul>
<li>接受请求的服务器的端口</li>
</ul>
<h4 id="server-protocol"><a href="#var_server_protocol" id="var_server_protocol"></a> $server_protocol</h4>
<ul>
<li>请求协议，通常为“ <code>HTTP/1.0</code>”，“ <code>HTTP/1.1</code>”或“ <a href="http-ngx_http_v2_module.html">HTTP/2.0</a>”</li>
</ul>
<h4 id="status"><a href="#var_status" id="var_status"></a> $status</h4>
<ul>
<li>响应状态(1.3.2、1.2.2)</li>
</ul>
<h4 id="tcpinfo-rtt-tcpinfo-rttvar-tcpinfo-snd-cwnd-tcpinfo-rcv-space"><a href="#var_tcpinfo_" id="var_tcpinfo_"></a> $ tcpinfo_rtt，$ tcpinfo_rttvar，$ tcpinfo_snd_cwnd，$ tcpinfo_rcv_space</h4>
<ul>
<li>有关客户端 TCP 连接的信息；在支持<code>TCP_INFO</code>套接字选项的系统上可用</li>
</ul>
<h4 id="time-iso8601"><a href="#var_time_iso8601" id="var_time_iso8601"></a> $time_iso8601</h4>
<ul>
<li>ISO 8601 标准格式(1.3.12，1.2.7)的本地时间</li>
</ul>
<h4 id="time-local"><a href="#var_time_local" id="var_time_local"></a> $time_local</h4>
<ul>
<li>通用日志格式的本地时间(1.3.12，1.2.7)</li>
</ul>
<h4 id="uri"><a href="#var_uri" id="var_uri"></a> $uri</h4>
<ul>
<li>请求中的当前 URI，<a href="#location">normalized</a></li>
</ul>
<p><code>$uri</code>的值可能会在请求处理期间更改，例如在进行内部重定向或使用索引文件时。</p>
</div>
</div>
</section>
<div class="right-sidebar">
<div class="affix"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6108808167664152" data-ad-slot="3102929424" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
</div>
</div>
<div class="ft">
<a href="#toolbar-title" id="anchorNavigationExGoTop"><i class="fa fa-arrow-up"></i></a>
<footer class="footer">
<div class="footer__container--normal">
<img alt="扫码关注公众号" title="扫码关注公众号" src="static/picture/qr-code.png" width="170" height="170">
<div class="footer__description--normal">
<p class="paragraph footer__author--normal">Docs4dev<sup class="super">&#xAE;</sup>
</p>
<p class="paragraph footer__quote&#45;&#45;normal">
如果你在使用过程中遇到任何问题，可以在 <a href="javascript:window.open('https://github.com/docs4dev/docs4dev-issues');" target="_blank" rel="noopener noreferrer">这里<i class="fa fa-external-link"></i></a> 提issue。
</p>
<div class="footer__main--normal">
<p class="paragraph footer__main__paragraph--normal copyright" style="color: #666 !important;">
<a href="javascript:window.open('https://beian.miit.gov.cn/');">
蜀ICP备14021783号-6
</a>
</p>
<p class="paragraph footer__main__paragraph--normal copyright" style="color: #666 !important;">
Copyright &#xA9; Docs4dev all
right reserved, powered by <a href="index2.html" target="_blank">Docs4dev</a></p>
</div>
</div>
</div>
<div class="box__issues">
</div>
</footer>
</div>
</div>
</div>
</div>
</div>
<script>
  var hasToc = true;
  /*  var downloadable = /!*false*!/ false;
    var editable = /!*false*!/ false;
    var code = /!*"nginx"*!/ false;
    var version = /!*"current"*!/ false;
    var type = /!*"reference"*!/ false;
    var lang = /!*"zh"*!/ 'en';
    //edit link
    require(["gitbook", "jQuery"], function (gitbook, $) {
      gitbook.events.bind('start', function (e, config) {
        // Add edit toolbar to left
        var chapterId = /!*17703*!/ 0;
        if (downloadable) {
          gitbook.toolbar.createButton({
            icon: 'fa fa-download',
            text: '下载',
            onClick: function () {
              window.open('/download?code=' + code + '&version=' + version + '&type=' + type + '&lang=' + lang);
            }
          });
        }
        if (editable) {
          gitbook.toolbar.createButton({
            icon: 'fa fa-edit',
            text: '编辑此页',
            onClick: function () {
              window.open('/docs/edit?chapterId=' + chapterId + '&lang=' + lang);
            }
          });
        }
      });
    });*/
</script>
<script>
    var code = "nginx";
    var lang = "zh";
  </script>

<script src="static/js/autocomplete-js.js"></script>
<script src="static/js/app.min.js"></script>
<script src="static/js/search.min.js"></script>
</body>
</html>
